آموزش SQL Server طراحی سیستم مدیریت مستندات

آموزش SQL Server مدیریت مستندات

توسط admin | گروه SQL Server | 1405/05/12

نظرات 0

 

 

آموزش SQL Server: طراحی سیستم مدیریت مستندات امن سازمانی

طراحی یک دیتابیس واقعی برای ثبت، نسخه‌بندی، طبقه‌بندی، کنترل دسترسی و ممیزی فایل‌های شرکت؛ همراه با داده‌های تمرینی درباره اینکه هر کاربر چه اسنادی را دیده یا دانلود کرده است.

SQL ServerRLSAudit TrailVersioningSHA-256 Hash Chain

فایل‌های آماده

فایل SQL شامل ساخت دیتابیس، جداول، روابط، ایندکس‌ها، RLS، Procedureها، Viewها، داده‌های تمرینی و گزارش‌های مشاهده و دانلود است.

هشدار: اسکریپت آزمایشگاهی، دیتابیس CorporateDMS_Lab را در صورت وجود حذف و دوباره ایجاد می‌کند. روی محیط عملیاتی اجرا نشود.

تحلیل اولیه مسئله

در یک سامانه مستندات حساس، فقط نگهداری نام و مسیر فایل کافی نیست. سامانه باید ثابت کند چه کسی، با چه سطح دسترسی، در چه نشست و از چه IP یا دستگاهی، کدام نسخه را مشاهده، دانلود، چاپ یا به اشتراک گذاشته است.

طراحی سیستم امنیتی مدیریت مستندات سازمان

دارایی‌ها

فایل و نسخه‌های آن، متادیتا، مجوزها، گردش تأیید، سوابق دسترسی، کلیدهای رمزگذاری و Backup.

تهدیدها

دسترسی بیش‌ازحد، سرقت فایل، اتصال مستقیم به DB، حذف یا تغییر لاگ، بدافزار و اشتراک‌گذاری ناخواسته.

اصول

کمترین دسترسی، تفکیک وظایف، MFA، مجوز موقت، Deny مقدم بر Allow و ثبت همه عملیات حساس.

تصمیم ذخیره‌سازی

متادیتا در SQL Server و فایل در Object Storage، FILESTREAM یا NAS رمزگذاری‌شده قرار می‌گیرد.

چرا فایل در جدول عادی VARBINARY(MAX) نیست؟ در مقیاس بالا، استریم فایل، آنتی‌ویروس، چرخه عمر، نسخه پشتیبان و لینک تحویل کوتاه‌عمر در فضای ذخیره‌سازی تخصصی بهتر مدیریت می‌شود. دیتابیس مسیر، هش و مجوز را کنترل می‌کند.

سناریوی پیشنهادی

شرکت فرضی شامل مدیریت ارشد، مالی، منابع انسانی، فناوری اطلاعات، حقوقی، فروش و حسابرسی داخلی است. فایل‌ها از راهنمای عمومی برند تا پرونده به‌کلی سری ادغام و تملک طبقه‌بندی می‌شوند.

  1. مالک سند، عنوان، دسته، واحد، سطح امنیت و سیاست نگهداری را ثبت می‌کند.
  2. فایل در فضای امن قرار می‌گیرد و هش SHA-256 نسخه ثبت می‌شود.
  3. کاربر پس از ورود و MFA، شناسه‌اش در SESSION_CONTEXT قرار می‌گیرد.
  4. RLS فقط ردیف‌های مجاز را برمی‌گرداند.
  5. برای دسترسی بین‌واحدی، مجوز صریح و زمان‌دار ثبت می‌شود.
  6. مشاهده، دانلود، چاپ، تأیید و دسترسی ناموفق در Audit Log ثبت می‌شود.
احراز هویت + MFA
Session Context
RLS و Permission
تحویل امن فایل
Audit Event

معماری پیشنهادی

Identity Provider

ورود سازمانی، MFA، قفل حساب و توکن کوتاه‌عمر.

Application / API

تنها مسیر مجاز برای مشاهده، دانلود و درخواست دسترسی.

SQL Server

متادیتا، نسخه‌ها، نقش‌ها، RLS، گردش تأیید و ممیزی.

Secure Storage

رمزگذاری فایل، اسکن بدافزار و URL امضاشده کوتاه‌عمر.

Key Management

کلیدها در HSM یا Key Vault و خارج از جداول عادی.

SIEM / Backup

هشدار رفتار غیرعادی، Backup رمزگذاری‌شده و نسخه غیرقابل‌تغییر.

سطوح امنیتی

سطح نمونه قاعده
عمومی راهنمای برند انتشار پس از تأیید
داخلی راهنمای کارکنان کارمند فعال + MFA
محرمانه حقوق و قرارداد سطح کافی + همان واحد یا مجوز صریح + واترمارک
سری معماری شبکه مشاهده امن و دانلود/چاپ پیش‌فرض غیرفعال
به‌کلی سری ادغام و تملک مجوز موقت، تأیید ارشد و ثبت دقیق

نمای کلی جداول

جدول عنوان کاربرد
org.Departments واحدهای سازمانی ساختار درختی شرکت و تفکیک واحد مالک یا مصرف‌کننده سند
sec.SecurityLevels سطوح طبقه‌بندی تعریف سطح عمومی تا به‌کلی سری و قواعد پایه هر سطح
sec.Users کاربران هویت کاربردی، واحد سازمانی و حداکثر سطح مجاز
sec.Roles / sec.UserRoles نقش‌ها و عضویت مدیریت RBAC و تاریخ اعتبار نقش‌های هر کاربر
doc.Categories دسته‌بندی سند ساختار درختی موضوعات مالی، حقوقی، فنی و مدیریتی
doc.RetentionPolicies سیاست نگهداری مدت نگهداری و اقدام پایان عمر سند
doc.Documents سند اصلی متادیتا، مالک، واحد، سطح امنیت و وضعیت چرخه عمر
doc.DocumentVersions نسخه‌های فایل هر نسخه فیزیکی با مسیر، هش، کلید مرجع و وضعیت اسکن
doc.Tags / doc.DocumentTags برچسب‌ها جست‌وجو و گروه‌بندی چندبه‌چند
sec.DocumentPermissions مجوزهای صریح Allow یا Deny برای کاربر یا نقش و تفکیک عملیات
sec.AccessRequests درخواست دسترسی گردش تأیید، دلیل کسب‌وکاری و اعتبار زمانی
audit.UserSessions نشست‌های کاربر ورود، خروج، IP، دستگاه، MFA و ابطال نشست
audit.ActivityTypes فرهنگ رویداد View، Download، Print، Share، Login و AccessDenied
audit.DocumentActivities لاگ ممیزی چه کسی، چه سندی، چه زمانی، از کجا و با چه نتیجه‌ای استفاده کرده است

واحدهای سازمانی org.Departments

ساختار درختی شرکت و تفکیک واحد مالک یا مصرف‌کننده سند.

فیلد کلیدی نوع توضیح
DepartmentID INT کلید اصلی
DepartmentCode VARCHAR(20) کد یکتا
DepartmentName NVARCHAR(150) نام واحد
ParentDepartmentID INT واحد بالادستی
IsActive BIT وضعیت

سطوح طبقه‌بندی sec.SecurityLevels

تعریف سطح عمومی تا به‌کلی سری و قواعد پایه هر سطح.

فیلد کلیدی نوع توضیح
SecurityLevelID TINYINT کلید اصلی
LevelCode VARCHAR(30) کد فنی
SortOrder TINYINT رتبه مقایسه
RequiresMFA BIT الزام MFA
AllowDownload BIT قاعده پایه دانلود
DefaultWatermark BIT واترمارک پیش‌فرض

کاربران sec.Users

هویت کاربردی، واحد سازمانی و حداکثر سطح مجاز.

فیلد کلیدی نوع توضیح
UserID INT کلید اصلی
Username NVARCHAR(100) نام کاربری یکتا
DepartmentID INT واحد
ClearanceLevelID TINYINT سطح مجوز
LockedUntil DATETIME2 قفل حساب
RowVersion ROWVERSION کنترل هم‌زمانی

نقش‌ها و عضویت sec.Roles / sec.UserRoles

مدیریت RBAC و تاریخ اعتبار نقش‌های هر کاربر.

فیلد کلیدی نوع توضیح
RoleID INT کلید نقش
RoleCode VARCHAR(50) کد نقش
UserID INT کاربر عضو
ValidUntil DATETIME2 پایان اعتبار
IsActive BIT وضعیت

دسته‌بندی سند doc.Categories

ساختار درختی موضوعات مالی، حقوقی، فنی و مدیریتی.

فیلد کلیدی نوع توضیح
CategoryID INT کلید اصلی
CategoryCode VARCHAR(30) کد
CategoryName NVARCHAR(150) عنوان
ParentCategoryID INT دسته والد

سیاست نگهداری doc.RetentionPolicies

مدت نگهداری و اقدام پایان عمر سند.

فیلد کلیدی نوع توضیح
RetentionPolicyID INT کلید اصلی
RetentionYears SMALLINT مدت
DispositionAction VARCHAR(20) Review/Archive/Destroy
RequiresApproval BIT نیاز به تأیید

سند اصلی doc.Documents

متادیتا، مالک، واحد، سطح امنیت و وضعیت چرخه عمر.

فیلد کلیدی نوع توضیح
DocumentID INT کلید اصلی
DocumentNumber NVARCHAR(50) شماره یکتا
Title NVARCHAR(300) عنوان
DepartmentID INT واحد؛ NULL یعنی سراسری
OwnerUserID INT مالک
SecurityLevelID TINYINT سطح امنیتی
DocumentStatus VARCHAR(20) وضعیت
IsDeleted BIT حذف نرم

نسخه‌های فایل doc.DocumentVersions

هر نسخه فیزیکی با مسیر، هش، کلید مرجع و وضعیت اسکن.

فیلد کلیدی نوع توضیح
DocumentVersionID BIGINT کلید نسخه
DocumentID INT سند والد
VersionNumber NVARCHAR(20) نسخه
StoragePath NVARCHAR(1000) مسیر امن
FileHashSHA256 VARBINARY(32) هش یکپارچگی
EncryptionKeyRef NVARCHAR(300) مرجع کلید
VirusScanStatus VARCHAR(20) اسکن بدافزار
IsCurrent BIT نسخه جاری

برچسب‌ها doc.Tags / doc.DocumentTags

جست‌وجو و گروه‌بندی چندبه‌چند.

فیلد کلیدی نوع توضیح
TagID INT کلید
TagName NVARCHAR(100) عنوان
DocumentID INT سند مرتبط

مجوزهای صریح sec.DocumentPermissions

Allow یا Deny برای کاربر یا نقش و تفکیک عملیات.

فیلد کلیدی نوع توضیح
PermissionID BIGINT کلید
PrincipalType VARCHAR(10) User/Role
Effect VARCHAR(5) Allow/Deny
CanView BIT مشاهده
CanDownload BIT دانلود
CanEdit BIT ویرایش
ExpiresAt DATETIME2 انقضا

درخواست دسترسی sec.AccessRequests

گردش تأیید، دلیل کسب‌وکاری و اعتبار زمانی.

فیلد کلیدی نوع توضیح
AccessRequestID BIGINT کلید
RequestedBy INT درخواست‌کننده
RequestedAction VARCHAR(20) عملیات
BusinessReason NVARCHAR(1000) دلیل
RequestStatus VARCHAR(20) وضعیت
ReviewedBy INT بررسی‌کننده

نشست‌های کاربر audit.UserSessions

ورود، خروج، IP، دستگاه، MFA و ابطال نشست.

فیلد کلیدی نوع توضیح
SessionID UNIQUEIDENTIFIER شناسه نشست
UserID INT کاربر
LoginAt/LogoutAt DATETIME2 بازه
IPAddress VARCHAR(45) IP
IsMfaVerified BIT MFA
IsRevoked BIT ابطال

فرهنگ رویداد audit.ActivityTypes

View، Download، Print، Share، Login و AccessDenied.

فیلد کلیدی نوع توضیح
ActivityTypeID SMALLINT کلید
ActivityCode VARCHAR(40) کد
RiskWeight TINYINT وزن ریسک

لاگ ممیزی audit.DocumentActivities

چه کسی، چه سندی، چه زمانی، از کجا و با چه نتیجه‌ای استفاده کرده است.

فیلد کلیدی نوع توضیح
ActivityID BIGINT کلید
RequestID UNIQUEIDENTIFIER شناسه درخواست
UserID INT کاربر
DocumentID/VersionID INT/BIGINT سند و نسخه
OccurredAt DATETIME2 زمان UTC
IsSuccessful BIT نتیجه
DownloadedBytes BIGINT حجم دانلود
WatermarkCode NVARCHAR(100) کد واترمارک
PrevEventHash/EventHash VARBINARY(32) زنجیره تشخیص دستکاری

منطق کنترل دسترسی

اسکریپت از SESSION_CONTEXT('AppUserId') و Row-Level Security استفاده می‌کند. قاعده دسترسی به این ترتیب است:

  1. کاربر فعال باشد و حساب قفل نباشد.
  2. مجوز صریح Deny بر Allow و دسترسی پایه مقدم است.
  3. مالک سند و مدیر سامانه دسترسی پایه دارند.
  4. سطح مجوز کاربر حداقل برابر سطح سند باشد.
  5. برای اسناد واحدی، کاربر عضو همان واحد باشد؛ سند سراسری محدودیت واحد ندارد.
  6. مجوز صریح کاربر یا نقش می‌تواند دسترسی موقت بین‌واحدی بدهد.
EXEC sec.usp_SetAppUserContext     @Username = N'maryam.finance';  EXEC doc.usp_ListAccessibleDocuments;
نکته امنیتی: AppUserId نباید از ورودی خام مرورگر گرفته شود. فقط پس از اعتبارسنجی Token و روی Connection کنترل‌شده تنظیم شود.

ثبت سوابق مشاهده و دانلود

جدول audit.DocumentActivities کاربر، نشست، سند، نسخه، نوع عملیات، زمان UTC، IP، دستگاه، نتیجه، حجم دانلود، واترمارک و JSON تکمیلی را نگه می‌دارد.

Procedure درج رویداد، هش رکورد قبلی را در payload رکورد جدید وارد می‌کند. بنابراین حذف یا تغییر یک رویداد وسط زنجیره با audit.usp_ValidateActivityHashChain قابل تشخیص است.

زنجیره هش جایگزین SQL Server Audit، Ledger یا ذخیره WORM نیست؛ یک لایه تکمیلی تشخیص دستکاری در سطح برنامه است.
EXEC audit.usp_ValidateActivityHashChain;

لایه‌های امنیتی مکمل

Row-Level Security

کنترل ردیف‌ها در خود موتور دیتابیس.

TDE

رمزگذاری فایل‌های دیتابیس و Backup در حالت سکون.

Always Encrypted

محافظت از ستون‌های بسیار حساس با کلید خارج از محیط DB.

SQL Server Audit

ثبت رویدادهای سطح سرور و دیتابیس در مقصد مستقل.

Least Privilege

نقش برنامه فقط EXECUTE روی Procedureها و SELECT محدود دارد.

DLP و Watermark

کنترل خروج اطلاعات، چاپ و انتساب فایل به دریافت‌کننده.

کوئری‌های تمرینی

چه کسی چه سندهایی را دیده است؟

SELECT FullName, DocumentNumber, Title,        COUNT(*) AS ViewCount,        MAX(OccurredAt) AS LastViewedAt FROM audit.vw_DocumentAccessHistory WHERE ActivityCode = 'VIEW'   AND IsSuccessful = 1 GROUP BY FullName, DocumentNumber, Title ORDER BY LastViewedAt DESC;

دانلودهای موفق

SELECT FullName, DocumentNumber, Title,        OccurredAt, DownloadedBytes,        WatermarkCode, IPAddress FROM audit.vw_DocumentAccessHistory WHERE ActivityCode = 'DOWNLOAD'   AND IsSuccessful = 1 ORDER BY OccurredAt DESC;

دسترسی‌های ناموفق

SELECT OccurredAt, Username, DocumentNumber,        ActivityName, FailureReason,        IPAddress, DeviceName FROM audit.vw_DocumentAccessHistory WHERE IsSuccessful = 0    OR ActivityCode = 'ACCESS_DENIED' ORDER BY OccurredAt DESC;

روش اجرای فایل SQL

  1. فایل را در SQL Server Management Studio باز کنید.
  2. آن را روی یک Instance آزمایشگاهی اجرا کنید.
  3. دیتابیس CorporateDMS_Lab ساخته می‌شود.
  4. داده‌های نمونه شامل ده سند، سیزده نسخه، هشت کاربر و سی رویداد ثبت می‌شود.
  5. در انتهای فایل، گزارش‌های نمونه به‌صورت خودکار اجرا می‌شوند.

نمودار ERD رابطه ای سیستم پایگاه داده مدیریت مستندات یا Document Center Control

نکات ضروری محیط تولید

  • رمز عبور واقعی را با Identity Provider و الگوریتم‌هایی مانند Argon2id یا bcrypt مدیریت کنید؛ هش‌های نمونه SQL صرفاً آموزشی‌اند.
  • اتصال مستقیم برنامه به جداول Audit ممنوع و عملیات فقط از Procedureهای محدود انجام شود.
  • کلیدهای فایل و TDE در HSM/Key Vault نگهداری و دوره‌ای چرخانده شوند.
  • SQL Server Audit، Backup رمزگذاری‌شده، تست بازیابی، SIEM و ذخیره غیرقابل‌تغییر فعال شود.
  • مجوزهای موقت خودکار منقضی و حساب کارکنان جداشده فوراً غیرفعال شود.
  • اسکن بدافزار، DLP، واترمارک پویا و لینک دانلود یک‌بارمصرف اعمال شود.

نمونه آموزشی طراحی سیستم مدیریت مستندات امن با SQL Server

 

 

 

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620