سطوح دسترسی در SQL Server چیست؟
- سطح سرور (Server-Level Permissions) :مربوط به کل سرور و عملیاتهای مدیریتی آن
- سطح پایگاه داده (Database-Level Permissions) :مربوط به یک پایگاه داده خاص و عملیاتهای آن
- سطح اشیاء (Object-Level Permissions) :مربوط به اشیاء خاص درون پایگاه داده، مانند جداول یا پروسیجرها
انواع دسترسیها در SQL Server
۱. دسترسیهای سطح سرور (Server-Level Permissions)
- CONTROL SERVER: کنترل کامل روی سرور، شامل تمام عملیاتها.
- CREATE ANY DATABASE: اجازه ایجاد پایگاه داده جدید.
- ALTER ANY LOGIN: مدیریت لاگینهای سرور (ایجاد، تغییر، حذف).
- VIEW SERVER STATE: مشاهده وضعیت و آمار عملکرد سرور.
- SHUTDOWN: خاموش کردن سرور.
- CONNECT SQL: اتصال به سرور.
GRANT CONTROL SERVER TO UserName;
۲. دسترسیهای سطح پایگاه داده (Database-Level Permissions)
- ALTER: تغییر ساختار پایگاه داده یا اشیاء آن (مانند جداول، نماها، پروسیجرها).
- BACKUP DATABASE: گرفتن نسخه پشتیبان از پایگاه داده.
- BACKUP LOG: گرفتن نسخه پشتیبان از لاگ تراکنشها.
- CONNECT: اجازه اتصال به پایگاه داده.
- CONTROL: کنترل کامل بر پایگاه داده، شامل تمام دسترسیها.
- CREATE TABLE/PROCEDURE/VIEW: ایجاد اشیاء جدید.
- SELECT/INSERT/UPDATE/DELETE: خواندن یا تغییر دادهها در تمام جداول.
- EXECUTE: اجرای پروسیجرها یا توابع.
- VIEW DEFINITION: مشاهده تعریف اشیاء (مانند ساختار جدول).
- VIEW DATABASE STATE: مشاهده وضعیت پایگاه داده.
GRANT SELECT, BACKUP DATABASE ON DATABASE::MyDatabase TO UserName;
۳. دسترسیهای سطح اسکیما و اشیاء
- Schema-Level Permissions: دسترسی به تمام اشیاء درون یک اسکیما (مانند SELECT روی تمام جداول یک اسکیما).
- Object-Level Permissions: دسترسی به یک شیء خاص، مانند یک جدول یا پروسیجر. مثال:
- SELECT ON TableName: خواندن دادهها از یک جدول خاص.
- EXECUTE ON ProcedureName: اجرای یک پروسیجر خاص.
GRANT SELECT ON Employees TO UserName;
مدیریت دسترسیها
GRANT: اعطای دسترسی.
GRANT SELECT ON TableName TO UserName;
DENY: منع صریح دسترسی.
DENY SELECT ON TableName TO UserName;
REVOKE: لغو دسترسی اعطا شده یا منع شده.
REVOKE SELECT ON TableName FROM UserName;
نقشهای سطح سرور در SQL Server
نقشهای سطح سرور (Server Roles) گروههایی از دسترسیهای از پیش تعریفشده هستند که به لاگینها در سطح سرور تخصیص داده میشوند. این نقشها برای مدیریت عملیاتهای کل سرور طراحی شدهاند و به سادهسازی تخصیص دسترسیها کمک میکنند. SQL Server مجموعهای از نقشهای پیشفرض سطح سرور ارائه میدهد که در ادامه توضیح داده شدهاند:
۱. sysadmin
۲. serveradmin
ALTER SERVER ROLE serveradmin ADD MEMBER LoginName;
۳. securityadmin
۴. processadmin
۵. setupadmin
ALTER SERVER ROLE setupadmin ADD MEMBER LoginName;
۶. bulkadmin
ALTER SERVER ROLE bulkadmin ADD MEMBER LoginName;
۷. diskadmin
ALTER SERVER ROLE diskadmin ADD MEMBER LoginName;
۸. dbcreator
ALTER SERVER ROLE dbcreator ADD MEMBER LoginName;
۹. public (نقش عمومی سطح سرور)
GRANT CONNECT SQL TO public;
نقشهای سطح پایگاه داده در SQL Server
نقشهای سطح پایگاه داده (Database Roles) برای مدیریت دسترسیها در یک پایگاه داده خاص استفاده میشوند. این نقشها به کاربران یا گروهها تخصیص داده میشوند و میتوانند دسترسیهای از پیش تعریفشده یا سفارشی را شامل شوند. نقشهای پایگاه داده به سه دسته تقسیم میشوند:
۱. نقشهای پیشفرض (Fixed Database Roles)
SQL Server مجموعهای از نقشهای پیشفرض را برای هر پایگاه داده ارائه میدهد. این نقشها عبارتاند از:
db_owner
ALTER ROLE db_owner ADD MEMBER UserName;
db_accessadmin
ALTER ROLE db_accessadmin ADD MEMBER UserName;
db_securityadmin
ALTER ROLE db_securityadmin ADD MEMBER UserName;
db_ddladmin
ALTER ROLE db_ddladmin ADD MEMBER UserName;
db_backupoperator
ALTER ROLE db_backupoperator ADD MEMBER UserName;
db_datareader
ALTER ROLE db_datareader ADD MEMBER UserName;
db_datawriter
ALTER ROLE db_datawriter ADD MEMBER UserName;
db_denydatareader
ALTER ROLE db_denydatareader ADD MEMBER UserName;
db_denydatawriter
ALTER ROLE db_denydatawriter ADD MEMBER UserName;
۲. نقش عمومی (public Role)
GRANT SELECT ON TableName TO public;
۳. نقشهای سفارشی (User-Defined Database Roles)
CREATE ROLE CustomRoleName;
GRANT SELECT, INSERT ON TableName TO CustomRoleName;
ALTER ROLE CustomRoleName ADD MEMBER UserName;
CREATE ROLE FinanceTeam;
GRANT SELECT, UPDATE ON FinancialTable TO FinanceTeam;
ALTER ROLE FinanceTeam ADD MEMBER Ali;
۴. نقشهای برنامهای (Application Roles)
CREATE APPLICATION ROLE AppRoleName WITH PASSWORD = 'SecurePassword';
GRANT SELECT ON TableName TO AppRoleName;
EXEC sp_setapprole 'AppRoleName', 'SecurePassword';
امنیت در سطح ردیف (Row-Level Security)
SQL Server امکان محدود کردن دسترسی به ردیفهای خاص در یک جدول را از طریق Row-Level Security (RLS) فراهم میکند. این قابلیت با استفاده از توابع امنیتی و سیاستهای دسترسی پیادهسازی میشود و برای سناریوهای حساس، مانند محدود کردن دسترسی کاربران به دادههای مربوط به خودشان، بسیار کاربردی است.
مثال:
CREATE FUNCTION Security.fn_securitypredicate(@UserID AS INT)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT ۱ AS fn_securitypredicate_result
WHERE @UserID = USER_ID();
پیشنهاد مطالعه:
بهترین روشها برای مدیریت دسترسیها و نقشها
برای اطمینان از امنیت و کارایی در مدیریت دسترسیها، رعایت نکات زیر ضروری است:
SELECT * FROM sys.server_permissions;
SELECT * FROM sys.database_permissions;
ابزارهای مدیریت دسترسیها
SELECT * FROM sys.fn_my_permissions(NULL, 'SERVER');
SELECT * FROM sys.fn_my_permissions(NULL, 'DATABASE');
مثالهای کاربردی
۱. تخصیص دسترسی به تیم توسعهدهندگان
CREATE ROLE Developers;
GRANT CREATE TABLE, SELECT ON DATABASE::MyDatabase TO Developers;
ALTER ROLE Developers ADD MEMBER DevUser;
۲. محدود کردن دسترسی یک کاربر
ALTER ROLE db_denydatareader ADD MEMBER RestrictedUser;
۳. ایجاد نقش برنامهای برای اپلیکیشن
CREATE APPLICATION ROLE WebAppRole WITH PASSWORD = 'AppPass123';
GRANT SELECT, INSERT ON Orders TO WebAppRole;
EXEC sp_setapprole 'WebAppRole', 'AppPass123';
۴. اعطای نقش سطح سرور
ALTER SERVER ROLE dbcreator ADD MEMBER LoginName;
نتیجهگیری
مدیریت سطوح دسترسی و نقشهای سطح سرور و پایگاه داده در SQL Server بخش حیاتی از امنیت دادهها است. نقشهای سطح سرور (مانند sysadmin و dbcreator) برای مدیریت کل سرور و نقشهای سطح پایگاه داده (مانند db_owner و db_datareader) برای مدیریت پایگاههای داده خاص طراحی شدهاند. با استفاده از دسترسیهای مناسب، نقشهای پیشفرض، سفارشی، برنامهای و رعایت بهترین روشها، میتوانید پایگاه دادهای امن و کارآمد داشته باشید.
اگر سوال یا سناریوی خاصی دارید، در بخش نظرات مطرح کنید تا راهنمایی دقیقتری ارائه شود!
ارتباط و مشاوره
برای اطلاعات بیشتر و مشاوره میتوانید از طریق زیر با ما در ارتباط باشید:
نظری داده نشده