SQL Server Sunucu ve Veritabanı Düzeyinde Roller

SQL-Server-Microsoft

SQL Server rolleri. Veritabanında yetki verilecek kullanıcıların güvenlik amacıyla çeşitli rollerle kısıtlamalar yapmamız gerekmektedir. Yapılmak istenen işlemlere göre bu rolleri şekillendirmemiz gerekir. Bu makalemde Server ve Database düzeyindeki SQL Server rolleri detaylarına değineceğim.

1. SQL Server Rolleri : Sunucu Düzeyinde Roller

Alttaki grafikte Server rollerinin yetkinliklerini görebiliriz:

Resim-1

Tek tek server seviyesinde rollerimizi inceleyecek olursak, Security sekmesi altında Server Roles altında mevcut rollerimizi görüntüleyebiliriz.

Resim-2

Komutlar

Bu rollerimizin yetkinliklerini detaylı olarak görebilmek için aşağıdaki scripti çalıştırabiliriz:

  • sp_srvrolepermission ‘ServerLevelRolesName’

Server düzeyinde  aşağıdaki script ile isteniler yetki ataması yapılabilir:

  • EXEC sp_addsrvrolemember @loginame=’…’, @rolename=’…’

Verilen yetkiyi almak istediğimizde de aşağıdaki scriptten faydalanabiliriz:

  • EXEC sp_dropsrvrolemember @loginame=’…’, @rolename=’…’

Yetki atayıp, geri alma işlemlerini SecurityàLogins sekmesinden istediğimiz yetkiyi de server seviyesinde tanımlayabiliriz.

Roller

Server seviyesinde rollerimize geçecek olursak:

Bulkadmin:

Bu role sahip kullanıcılar BULK INSERT deyimini çalıştırabilir.

Genelde başka bir veri kaynağından ya da Excel’den veri çekme işlemleri için kullanılır.

sp_srvrolepermission ‘bulkadmin’ dediğimizde de aşağıdaki gibi yetkinliklerini görebiliyoruz.

ServerRole Permission
bulkadmin Add member to bulkadmin
bulkadmin BULK INSERT

Dbcreator:

Bu role sahip olan kullanıcı başlıca olarak herhangi bir veritabanı Create edebilir, Alter edip düzenleyebilir, Drop edebilir veya herhangi bir veritabanını Restore edebilir.

Yazılımcılara test amaçlı bu yetki verilebilir.

ServerRole Permission
dbcreator Add member to dbcreator
dbcreator ALTER DATABASE
dbcreator CREATE DATABASE
dbcreator DROP DATABASE
dbcreator Extend database
dbcreator RESTORE DATABASE
dbcreator RESTORE LOG
dbcreator sp_renamedb

Diskadmin:

Bu role sahip kullanıcılar disk dosyalarını yönetebilir.

ServerRole Permission
diskadmin Add member to diskadmin
diskadmin DISK INIT
diskadmin sp_addumpdevice
diskadmin sp_diskdefault
diskadmin sp_dropdevice

Processadmin:

Bu role sahip kullanıcılar tüm processleri görebilir, yönetebilir ve Kill komutuyla istediği tüm processleri sonlandırabilir.

ServerRole Permission
processadmin Add member to processadmin
processadmin KILL

Public:

Tüm SQL Server kullanıcıları, gruplarına vs. varsayılan olarak public rolü atanır. Bu rol ile sadece SQL Server’a bağlanabilir ancak herhangi bir işlem yapamaz.

Securityadmin:

Bu role sahip kullanıcıların girişleri ve özelliklerini yönetir. GRANT, DENY ve REVOKE sunucu düzeyinde izinleri atayabilirler. Ayrıca GRANT, DENY ve REVOKE veritabanı düzeyinde izinleri de atayabilirler.  SQL Server girişleri için şifreleri sıfırlayabilirler ve SQL Server hesabı oluşturup silebilirler. Rol oluşturamazlar. Kısacası SQL Server login bilgilerini yönetir.

ServerRole Permission
securityadmin Add member to securityadmin
securityadmin Grant/deny/revoke CREATE DATABASE
securityadmin Read the error log
securityadmin sp_addlinkedsrvlogin
securityadmin sp_addlogin
securityadmin sp_defaultdb
securityadmin sp_defaultlanguage
securityadmin sp_denylogin
securityadmin sp_droplinkedsrvlogin
securityadmin sp_droplogin
securityadmin sp_dropremotelogin
securityadmin sp_grantlogin
securityadmin sp_helplogins
securityadmin sp_password
securityadmin sp_remoteoption (update)
securityadmin sp_revokelogin

Serveradmin:

Bu role sahip kullanıcılar sunucu genelinde yapılandırma seçeneklerini değiştirebilir ve sunucuyu kapatabilir.

ServerRole Permission
serveradmin Add member to serveradmin
serveradmin dbcc freeproccache
serveradmin RECONFIGURE
serveradmin SHUTDOWN
serveradmin sp_configure
serveradmin sp_fulltext_service
serveradmin sp_tableoption

Setupadmin:

Bu role sahip kullanıcılar linked server ekleyebilir, kaldırabilir ve bazı sistem stored procedure lerini yürütebilir.

ServerRole Permission
setupadmin Add member to setupadmin
setupadmin Add/drop/configure linked servers
setupadmin Mark a stored procedure as startup

Sysadmin:

En yetkin rolümüz system admindir. Bu role sahip kullanıcılar her işlemi gerçekleştirebilme yetkisine sahiptir. Bu yetkinin database adminleri dışında diğer kullanıcılarda bulunması önerilmez.

ServerRole Permission
sysadmin Add extended procedures
sysadmin Add member to bulkadmin
sysadmin Add member to dbcreator
sysadmin Add member to diskadmin
sysadmin Add member to processadmin
sysadmin Add member to securityadmin
sysadmin Add member to serveradmin
sysadmin Add member to setupadmin
sysadmin Add member to sysadmin
sysadmin Add/drop to/from db_accessadmin
sysadmin Add/drop to/from db_backupoperator
sysadmin Add/drop to/from db_datareader
sysadmin Add/drop to/from db_datawriter
sysadmin Add/drop to/from db_ddladmin
sysadmin Add/drop to/from db_denydatareader
sysadmin Add/drop to/from db_denydatawriter
sysadmin Add/drop to/from db_owner
sysadmin Add/drop to/from db_securityadmin
sysadmin Add/drop/configure linked servers
sysadmin All DDL but GRANT, REVOKE, DENY
sysadmin ALTER DATABASE
sysadmin BACKUP DATABASE
sysadmin BACKUP LOG
sysadmin BULK INSERT
sysadmin CHECKPOINT
sysadmin Complete SETUSER SQL user
sysadmin Constraints on System tables
sysadmin CREATE DATABASE
sysadmin Create indices on system tables
sysadmin Create/delete/modify system tables
sysadmin dbcc change ‘on’ rules
sysadmin dbcc checkalloc
sysadmin dbcc checkdb
sysadmin dbcc checkfilegroup
sysadmin dbcc checkident
sysadmin dbcc checktable
sysadmin dbcc cleantable
sysadmin dbcc dbreindex
sysadmin dbcc dropcleanbuffers
sysadmin dbcc freeproccache
sysadmin dbcc inputbuffer
sysadmin dbcc outputbuffer
sysadmin dbcc pintable
sysadmin dbcc proccache
sysadmin dbcc setcpuweight
sysadmin dbcc setioweight
sysadmin dbcc show_statistics
sysadmin dbcc showcontig
sysadmin dbcc showoptweights
sysadmin DBCC ShrinkDatabase
sysadmin dbcc shrinkfile
sysadmin dbcc traceon/off
sysadmin dbcc updateusage
sysadmin DELETE permission on any object
sysadmin DENY
sysadmin DISK INIT
sysadmin DROP DATABASE
sysadmin EXECUTE any procedure
sysadmin Extend database
sysadmin GRANT
sysadmin Grant/deny/revoke CREATE DATABASE
sysadmin INSERT permission on any object
sysadmin KILL
sysadmin Mark a stored procedure as startup
sysadmin Raiserror With Log
sysadmin Read the error log
sysadmin RECONFIGURE
sysadmin REFERENCES permission on any table
sysadmin RESTORE DATABASE
sysadmin RESTORE LOG
sysadmin REVOKE
sysadmin SELECT permission on any object
sysadmin SHUTDOWN
sysadmin sp_addapprole
sysadmin sp_addlinkedsrvlogin
sysadmin sp_addlogin
sysadmin sp_addrole
sysadmin sp_addrolemember
sysadmin sp_addumpdevice
sysadmin sp_adduser
sysadmin sp_altermessage
sysadmin sp_approlepassword
sysadmin sp_change_users_login
sysadmin sp_changedbowner
sysadmin sp_changeobjectowner
sysadmin sp_configure
sysadmin sp_dbcmptlevel
sysadmin sp_defaultdb
sysadmin sp_defaultlanguage
sysadmin sp_denylogin
sysadmin sp_diskdefault
sysadmin sp_dropapprole
sysadmin sp_dropdevice
sysadmin sp_droplinkedsrvlogin
sysadmin sp_droplogin
sysadmin sp_dropremotelogin
sysadmin sp_droprole
sysadmin sp_droprolemember
sysadmin sp_dropuser
sysadmin sp_fulltext_catalog
sysadmin sp_fulltext_column
sysadmin sp_fulltext_database
sysadmin sp_fulltext_service
sysadmin sp_fulltext_table
sysadmin sp_grantdbaccess
sysadmin sp_grantlogin
sysadmin sp_helplogins
sysadmin sp_password
sysadmin sp_recompile
sysadmin sp_refreshview
sysadmin sp_remoteoption
sysadmin sp_remoteoption (update)
sysadmin sp_rename
sysadmin sp_renamedb
sysadmin sp_revokedbaccess
sysadmin sp_revokelogin
sysadmin sp_tableoption
sysadmin sp_updatestats
sysadmin TRUNCATE TABLE
sysadmin UPDATE permission on any object
sysadmin USE to a suspect database

2. SQL Server Rolleri : Veritabanı Düzeyinde Roller

Veritabanı düzeyindeki roller, tanımlanmış olduğu veritabanı kapsamlarındadır.

İlgili veritabanı altında SecurityàRoles dediğimizde de bu rolleri görüntüleyebiliriz.

Resim-3

Ya da sabit veritabanı rollerini görebilmek için Security sekmesi altında Logins kısmında yetki vermek istediğimiz kullanıcıya tıklayarak User Mapping sayfasında kullanıcıya ilgili veritabanlarına roller tanımlayabiliriz. Veritabanını sadece işaretlemek varsayılan olarak public yetkisini tanımlar. Bu yetki ile sadece ilgili veritabanına erişebiliriz herhangi bir işlem yapamayız.

Resim-4

Komutlar

Aşağıdaki script ile de yetkilendirmek istediğimiz veritabanında kullanıcıya yetki tanımlayabiliriz:

  • EXEC sp_addrolemember @membername=’…’, @rolename=’…’

Verilen yetkiyi geri almak için de aşağıdaki scriptten yararlanabiliriz:

  • EXEC sp_droprolemember @membername=’…’, @rolename=’…’

Veritabanı düzeyindeki rollerin yetkinliklerini aşağıdaki grafikle görebiliriz.

Resim-5

Veritabanı düzeyindeki rollerin yetkinliklerini detaylı olarak görebilmek için aşağıdaki scriptten yararlanabiliriz:

  • EXEC sp_dbfixedrolepermission ‘DatabaseLevelRolesName’

Roller

Rollerimize geçecek olursak:

db_owner:

Veritabanı düzeyinde verilebilecek en kapsamlı roldür Bu role sahip kullanıcılar veritabanındaki tüm yapılandırma ve bakım etkinliklerini gerçekleştirebilir.

DbFixedRole Permission
db_owner Add/drop to/from db_accessadmin
db_owner Add/drop to/from db_backupoperator
db_owner Add/drop to/from db_datareader
db_owner Add/drop to/from db_datawriter
db_owner Add/drop to/from db_ddladmin
db_owner Add/drop to/from db_denydatareader
db_owner Add/drop to/from db_denydatawriter
db_owner Add/drop to/from db_owner
db_owner Add/drop to/from db_securityadmin
db_owner All DDL but GRANT, REVOKE, DENY
db_owner BACKUP DATABASE
db_owner BACKUP LOG
db_owner CHECKPOINT
db_owner dbcc checkalloc
db_owner dbcc checkdb
db_owner dbcc checkfilegroup
db_owner dbcc checkident
db_owner dbcc checktable
db_owner dbcc cleantable
db_owner dbcc dbreindex
db_owner dbcc proccache
db_owner dbcc show_statistics
db_owner dbcc showcontig
db_owner dbcc shrinkdatabase
db_owner dbcc shrinkfile
db_owner dbcc updateusage
db_owner DELETE permission on any object
db_owner DENY
db_owner EXECUTE any procedure
db_owner GRANT
db_owner INSERT permission on any object
db_owner REFERENCES permission on any table
db_owner REVOKE
db_owner SELECT permission on any object
db_owner sp_addapprole
db_owner sp_addrole
db_owner sp_addrolemember
db_owner sp_approlepassword
db_owner sp_change_users_login
db_owner sp_changeobjectowner
db_owner sp_dbcmptlevel
db_owner sp_dropapprole
db_owner sp_droprole
db_owner sp_droprolemember
db_owner sp_dropuser
db_owner sp_fulltext_catalog
db_owner sp_fulltext_column
db_owner sp_fulltext_database
db_owner sp_fulltext_table
db_owner sp_grantdbaccess
db_owner sp_recompile
db_owner sp_refreshview
db_owner sp_rename
db_owner sp_revokedbaccess
db_owner sp_tableoption
db_owner TRUNCATE TABLE
db_owner UPDATE permission on any object

db_securityadmin:

Bu role sahip kullanıcılar, yalnızca özel roller için rol üyeliğini değiştirebilir ve izinleri yönetebilir. Bu rolün üyeleri potansiyel olarak ayrıcalıklarını yükseltebilir ve eylemleri izlenmelidir.

DbFixedRole Permission
db_securityadmin DENY
db_securityadmin GRANT
db_securityadmin REVOKE
db_securityadmin sp_addapprole
db_securityadmin sp_addrole
db_securityadmin sp_addrolemember
db_securityadmin sp_approlepassword
db_securityadmin sp_changeobjectowner
db_securityadmin sp_dropapprole
db_securityadmin sp_droprole
db_securityadmin sp_droprolemember

db_accessadmin:

Bu role sahip kullanıcılar, Windows oturum açma işlemleri, Windows grupları ve SQL Server oturum açma işlemleri için veritabanına erişim ekleyebilir veya bu veritabanına erişimi kaldırabilir.

DbFixedRole Permission
db_accessadmin sp_dropuser
db_accessadmin sp_grantdbaccess
db_accessadmin sp_revokedbaccess

db_backupoperator:

Bu role sahip kullanıcılar, veritabanını yedekleyebilir.

DbFixedRole Permission
db_backupoperator BACKUP DATABASE
db_backupoperator BACKUP LOG
db_backupoperator CHECKPOINT

db_ddladmin:

Bu role sahip kullanıcılar, bir veritabanındaki herhangi bir Veri Tanımlama Dili (DDL) komutunu çalıştırabilir.

DbFixedRole Permission
db_ddladmin All DDL but GRANT, REVOKE, DENY
db_ddladmin dbcc cleantable
db_ddladmin dbcc show_statistics
db_ddladmin dbcc showcontig
db_ddladmin REFERENCES permission on any table
db_ddladmin sp_changeobjectowner
db_ddladmin sp_fulltext_column
db_ddladmin sp_fulltext_table
db_ddladmin sp_recompile
db_ddladmin sp_rename
db_ddladmin sp_tableoption
db_ddladmin TRUNCATE TABLE

db_datawriter:

Bu role sahip kullanıcılar, tüm kullanıcı tablolarındaki verileri ekleyebilir, silebilir veya değiştirebilir.

DbFixedRole Permission
db_datawriter DELETE permission on any object
db_datawriter INSERT permission on any object
db_datawriter UPDATE permission on any object

db_datareader:

Bu role sahip kullanıcılar, tüm kullanıcı tablolarından tüm verileri okuyabilir.

DbFixedRole Permission
db_datareader SELECT permission on any object

db_denydatawriter:

Bu role sahip kullanıcılar, bir veritabanı içindeki kullanıcı tablolarındaki herhangi bir veriyi ekleyemez, değiştiremez veya silemez.

DbFixedRole Permission
db_denydatawriter No DELETE permission on any object
db_denydatawriter No INSERT permission on any object
db_denydatawriter No UPDATE permission on any object

db_denydatareader:

Bu role sahip kullanıcılar, bir veritabanı içindeki kullanıcı tablolarındaki herhangi bir veriyi okuyamaz.

DbFixedRole Permission
db_denydatareader No SELECT permission on any object

public:

Tüm veritabanı kullanıcılarına varsayılan olarak gelen bir roldür. En düşük izin ve ayrıcalıklarını taşımaktadır. Bir kullanıcıya public dışında atadığınız her rol, yeni ayrıcalık ve izin ekler.

Verilen bu yetkiler tüm veritabanı için geçerli yetkilerdir. Örneğin kullanıcı sadece Insert işlemi yapıyorsa bu kullanıcıya db_datawriter rolünü tanımlarsak bu kullanıcıya aynı zamanda kayıtlar için ALTER ve DELETE yetkisi de tanımlamış oluruz. Her zaman kullanıcının ihtiyacı kadar, minimum yetkiler vererek hareket etmeliyiz. Bu yüzden sadece INSERT yetkisi tanımlamak istediğimizde ilgili database üzerine sağ tık àPropertiesàPermissions sayfasına gelirsek,

Resim-6

Permission for alanında Insert yetkisini vermek için ilgili alana Grant diyebiliriz. Insert dışında aşağıdaki yetkiler de tanımlanabilir:

Permission List
ALTER ANY MASK
ALTER ANY EXTERNAL DATA SOURCE
ALTER ANY EXTERNAL FILE FORMAT
ALTER
ALTER ANY ASYMMETRIC KEY
ALTER ANY APPLICATION ROLE
ALTER ANY ASSEMBLY
ALTER ANY CERTIFICATE
ALTER ANY DATABASE AUDIT
ALTER ANY DATASPACE
ALTER ANY DATABASE EVENT NOTIFICATION
ALTER ANY FULLTEXT CATALOG
ALTER ANY MESSAGE TYPE
ALTER ANY ROLE
ALTER ANY ROUTE
ALTER ANY REMOTE SERVICE BINDING
ALTER ANY CONTRACT
ALTER ANY SYMMETRIC KEY
ALTER ANY SCHEMA
ALTER ANY SECURITY POLICY
ALTER ANY SERVICE
ALTER ANY DATABASE DDL TRIGGER
ALTER ANY USER
AUTHENTICATE
BACKUP DATABASE
BACKUP LOG
CONTROL
CONNECT
CONNECT REPLICATION
CHECKPOINT
CREATE AGGREGATE
CREATE ASYMMETRIC KEY
CREATE ASSEMBLY
CREATE CERTIFICATE
CREATE DEFAULT
CREATE DATABASE DDL EVENT NOTIFICATION
CREATE FUNCTION
CREATE FULLTEXT CATALOG
CREATE MESSAGE TYPE
CREATE PROCEDURE
CREATE QUEUE
CREATE ROLE
CREATE ROUTE
CREATE RULE
CREATE REMOTE SERVICE BINDING
CREATE CONTRACT
CREATE SYMMETRIC KEY
CREATE SCHEMA
CREATE SYNONYM
CREATE SERVICE
CREATE TABLE
CREATE TYPE
CREATE VIEW
CREATE XML SCHEMA COLLECTION
DELETE
EXECUTE
INSERT
REFERENCES
SELECT
SHOWPLAN
SUBSCRIBE QUERY NOTIFICATIONS
TAKE OWNERSHIP
UNMASK
UPDATE
VIEW DEFINITION
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
VIEW ANY COLUMN MASTER KEY DEFINITION
VIEW DATABASE STATE

SQL Server’da bir kullanıcıya kısıtlı yetki vermek

Kullanıcıya tüm veritabanını kapsayacak şekilde yetki vermek istemiyorsak yani veritabanındaki herhangi bir nesne özelinde bir yetki tanımlamak istiyorsak ilgili database altında Security sekmesi à İlgili kullanıcı user ına çift tık ile Securables sayfasına gidiyoruz. Burada Search deyip Specific Objects… işaretliyken OK diyoruz.

Resim-7

Bu sayfada hangi objeye özel bir yetki tanımlayacağımızı seçeriz. Object Type sayfasında örneğin Stored Procedures ve Tables alanını işaretleyelim. Örneğin yapmak istediğim ilgili kullanıcıya bir stored procedure için View Definition yetkisi tanımlamak ve seçtiğim bir tablo için de Update yetkisi vermek. Belirleyeceğim nesneyi Enter the object names to select alanında Object Types alanine belirledikten sonra Browse… diyerek arayabilir ve işaretleyebilirim.

Resim-8

Seçilmiş olan nesneler OK dedikten sonra aşağıdaki gibi karşımıza gelir. Burada Stored Procedure ün üstüne tıklayıp alt alandan View Definition yetkisini, Table ın üzerine tıklayıp da Update yetkisini Grant alanından işaretleyerek işlemi tamamlayabilirim.

Resim-9

Grant ile bu yetkileri sağlayabilirken,

With Grant seçeneği ile yetki verilen kullanıcıların, aynı yetkileri bir başka kullanıcıya da tanımlama hakkı sağlamış oluruz.

Deny seçeneği ile de kullanıcı için istenilen yetkiler engellenebilir.

Özelleştirerek vermiş olduğumuz yetkiler için kullanıcımızda Database düzeyinde public rolünde kalmış olması yeterlidir.

SQL Server rolleri için umarım faydalı bir makale olmuştur.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

https://www.mshowto.org

Server and Database Roles in SQL Server 

TAGs: SQL Server rolleri, SQL Server , Server Level Roles, Database Level Roles, Permissions, serveradmin, securityadmin, processadmin, setupadmin, bulkadmin, diskadmin, dbcreator,
db_owner, db_securityadmin, db_accessadmin, db_backupoperator, db_ddladmin, db_datawriter, db_datareader, db_denydatawriter, db_denydatareader, public

 

Yazı gezinmesi

Mobil sürümden çık