Aracılığıyla paylaş


Azure SQL Veritabanı için izin yönetimi sunucu rolleri

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu makalede, Azure SQL Veritabanı'daki sabit sunucu düzeyinde roller açıklanmaktadır.

Not

Bu makaledeki sabit sunucu düzeyindeki roller Azure SQL Veritabanı için genel önizleme aşamasındadır. Bu sunucu düzeyindeki roller, SQL Server 2022 sürümünün de bir parçasıdır.

Genel bakış

Azure SQL Veritabanı'de sunucu mantıksal bir kavramdır ve izinler sunucu düzeyinde verilemiyor. İzin yönetimini basitleştirmek için Azure SQL Veritabanı, mantıksal sunucu üzerindeki izinleri yönetmenize yardımcı olacak bir dizi sabit sunucu düzeyinde rol sağlar. Roller, oturum açma bilgilerini gruplayan güvenlik sorumlularıdır.

Not

Bu makaledeki roller kavramı, Windows işletim sistemindeki gruplara benzer.

Bu özel sabit sunucu düzeyindeki roller, kullanıcı tarafından oluşturulan diğer normal sorumlulardan ayırt etmek için ön eki ##MS_ ve son eki ## kullanır.

Şirket içi SQL Server gibi sunucu izinleri de hiyerarşik olarak düzenlenir. Bu sunucu düzeyindeki roller tarafından tutulan izinler veritabanı izinlerine yayılabilir. İzinlerin veritabanı düzeyinde etkili bir şekilde yararlı olabilmesi için, oturum açmanın ya tüm veritabanlarına ##MS_DatabaseConnector## veren CONNECT sunucu düzeyi rolünün bir üyesi olması ya da belirli veritabanlarına ait bir kullanıcı hesabına sahip olması gerekir. Bu, sanal master veritabanı için de geçerlidir.

Örneğin, sunucu düzeyindeki rol ##MS_ServerStateReader## iznine VIEW SERVER STATEsahiptir. Bu rolün üyesi olan bir oturumun master ve WideWorldImporters veritabanlarında bir kullanıcı hesabı varsa, bu kullanıcı bu iki veritabanında VIEW DATABASE STATE iznine sahiptir.

Not

Kullanıcı veritabanlarında, rol üyeliği aracılığıyla sunucu genelindeki izni geçersiz kılarak tüm izinler reddedilebilir. Ancak, sistem veritabanında masterizinler verilemiyor veya reddedilemiyor.

Azure SQL Veritabanı şu anda yedi sabit sunucu rolü sağlar. Sabit sunucu rollerine verilen izinler değiştirilemez ve bu rollerin üye olarak başka sabit rolleri olamaz. Sunucu düzeyinde oturum açma bilgilerinin, sunucu düzeyindeki rollere üye olarak eklenmesini sağlayabilirsiniz.

Önemli

Sabit bir sunucu rolünün her üyesi aynı role başka oturum açma bilgileri ekleyebilir.

Azure SQL Veritabanı oturum açma bilgileri ve kullanıcılar hakkında daha fazla bilgi için, SQL Veritabanı, SQL Yönetilen Örneği ve Azure Synapse Analytics'e veritabanı erişimini yetkilendirme konusuna bakın.

Sunucu düzeyinde roller düzeltildi

Aşağıdaki tabloda sabit sunucu düzeyindeki roller ve bunların özellikleri gösterilmektedir.

Sabit sunucu düzeyinde rol Açıklama
##MS_DatabaseConnector## Sabit sunucu rolünün ##MS_DatabaseConnector## üyeleri, veritabanındaki bir Kullanıcı hesabının bağlanmasına gerek kalmadan herhangi bir veritabanına bağlanabilir.

Kullanıcılar, belirli bir veritabanının iznini CONNECT reddetmek için veritabanında bu oturum açma için eşleşen bir kullanıcı hesabı ve ardından DENYCONNECT veritabanı-kullanıcı izni oluşturabilir. Bu DENY izni, bu rolden gelen GRANT CONNECT izni geçersiz kılar.
##MS_DatabaseManager## Sabit sunucu rolünün ##MS_DatabaseManager## üyeleri veritabanları oluşturabilir ve silebilir. Veritabanı oluşturan rolün ##MS_DatabaseManager## bir üyesi, bu veritabanının sahibi olur ve bu da kullanıcının bu veritabanına kullanıcı olarak bağlanmasına dbo olanak tanır. Kullanıcının dbo veritabanındaki tüm veritabanı izinleri vardır. Rolün ##MS_DatabaseManager## üyelerinin sahip olmadığı veritabanlarına erişme izni olması gerekmez. bu sunucu rolünü içinde var olan dbmanagermasterkullanmalısınız.
##MS_DefinitionReader## Sabit sunucu rolünün ##MS_DefinitionReader## üyeleri, bu rolün üyesinin VIEW ANY DEFINITIONkullanıcı hesabına sahip olduğu tüm veritabanlarında sırasıyla VIEW DEFINITION kapsamındaki tüm katalog görünümlerini okuyabilir.
##MS_LoginManager## Sabit sunucu rolünün ##MS_LoginManager## üyeleri oturum açma bilgileri oluşturabilir ve silebilir. Bu sunucu rolünü, veritabanı düzeyi rolü yerine master kullanmayı tercih etmelisiniz.
##MS_SecurityDefinitionReader## Sabit sunucu rolünün ##MS_SecurityDefinitionReader## üyeleri, VIEW ANY SECURITY DEFINITION kapsamında yer alan tüm katalog görünümlerini okuyabilir ve bu rolün üyesi olarak kullanıcı hesabına sahip oldukları herhangi bir veritabanında VIEW SECURITY DEFINITION iznine sahiptirler. Bu, sunucu rolünün erişimi olan ##MS_DefinitionReader## öğenin küçük bir alt kümesidir.
##MS_ServerStateManager## ##MS_ServerStateManager## sabit sunucu rolünün üyeleri, ##MS_ServerStateReader## rolüyle aynı izinlere sahiptir. Ayrıca, şu gibi çeşitli yönetim işlemlerine erişim sağlayan iznini de barındırıyor ALTER SERVER STATE : DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE ('ALL'), DBCC SQLPERF();
##MS_ServerStateReader## Sabit sunucu rolünün üyeleri, bu rolün ##MS_ServerStateReader## üyesinin kullanıcı hesabına sahip olduğu tüm veritabanlarında sırasıyla VIEW SERVER STATE kapsamındaki tüm dinamik yönetim görünümlerini (DMV) ve işlevleri VIEW DATABASE STATEokuyabilir.

Sabit sunucu rollerinin izinleri

Her sabit sunucu düzeyinde rolün kendisine atanmış belirli izinleri vardır. Aşağıdaki tabloda sunucu düzeyindeki rollere atanan izinler gösterilmektedir. Ayrıca, kullanıcı tek tek veritabanlarına bağlanabildiği sürece devralınan veritabanı düzeyinde izinleri de gösterir.

Sabit sunucu düzeyinde rol Sunucu düzeyinde izinler Veritabanı düzeyinde izinler (oturum açma bilgileriyle eşleşen bir veritabanı kullanıcısı varsa)
##MS_DatabaseConnector## CONNECT ANY DATABASE CONNECT
##MS_DatabaseManager## CREATE ANY DATABASE, ALTER ANY DATABASE ALTER
##MS_DefinitionReader## VIEW ANY DATABASE, VIEW ANY DEFINITION, VIEW ANY SECURITY DEFINITION VIEW DEFINITION, VIEW SECURITY DEFINITION
##MS_LoginManager## CREATE LOGIN, ALTER ANY LOGIN Yok
##MS_SecurityDefinitionReader## VIEW ANY SECURITY DEFINITION VIEW SECURITY DEFINITION
##MS_ServerStateManager## ALTER SERVER STATE, VIEW SERVER STATE, VIEW SERVER PERFORMANCE STATE, VIEW SERVER SECURITY STATE VIEW DATABASE STATE, VIEW DATABASE PERFORMANCE STATE, VIEW DATABASE SECURITY STATE
##MS_ServerStateReader## VIEW SERVER STATE, VIEW SERVER PERFORMANCE STATE, VIEW SERVER SECURITY STATE VIEW DATABASE STATE, VIEW DATABASE PERFORMANCE STATE, VIEW DATABASE SECURITY STATE

İzinler

Yalnızca sunucu yönetici hesabı veya Microsoft Entra yönetici hesabı (Microsoft Entra grubu olabilir) sunucu rollerine veya sunucu rollerinden diğer oturum açma bilgilerini ekleyebilir veya kaldırabilir. Bu, Azure SQL Veritabanı özgüdür.

Not

Microsoft Entra Id daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

Sunucu düzeyinde rollerle çalışma

Aşağıdaki tabloda sistem görünümleri ve Azure SQL Veritabanı sunucu düzeyindeki rollerle çalışmak için kullanabileceğiniz işlevler açıklanmaktadır.

Özellik Type Açıklama
IS_SRVROLEMEMBER Meta veri SQL oturum açma bilgilerinin belirtilen sunucu düzeyindeki rolün üyesi olup olmadığını gösterir.
sys.server_role_members Meta veri Sunucu düzeyindeki her rolün her üyesi için bir satır döndürür.
sys.sql_logins Meta veri SQL oturum girişlerinin her biri için bir satır döndürür.
SUNUCU ROLÜNÜ DEĞİŞTİR Komut Sunucu rolünün üyelerini değiştirir.

Örnekler

Bu bölümdeki örneklerde, Azure SQL Veritabanı'da sunucu düzeyindeki rollerle çalışma gösterilmektedir.

A. Sunucu düzeyinde bir role SQL oturum açma bilgisi ekleme

Aşağıdaki örnek SQL oturum açma bilgilerini Jiao sunucu düzeyinde rolüne ##MS_ServerStateReader##ekler. Bu deyimin sanal master veritabanında çalıştırılması gerekir.

ALTER SERVER ROLE ##MS_ServerStateReader##
    ADD MEMBER Jiao;
GO

B. Sunucu düzeyinde bir rolün üyesi olan tüm sorumluları (SQL kimlik doğrulaması) listeleme

Aşağıdaki sorgu, sys.server_role_members ve sys.sql_logins katalog görünümlerini kullanarak herhangi bir sabit sunucu düzeyinde rolün tüm üyelerini döndürür. Bu deyimin sanal master veritabanında çalıştırılması gerekir.

SELECT sql_logins.principal_id AS MemberPrincipalID,
    sql_logins.name AS MemberPrincipalName,
    roles.principal_id AS RolePrincipalID,
    roles.name AS RolePrincipalName
FROM sys.server_role_members AS server_role_members
INNER JOIN sys.server_principals AS roles
    ON server_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.sql_logins AS sql_logins
    ON server_role_members.member_principal_id = sql_logins.principal_id;
GO

C. Tam örnek: Sunucu düzeyinde bir role oturum açma bilgisi ekleme, rol üyeliği ve izinleri için meta verileri alma ve test sorgusu çalıştırma

Bölüm 1: Rol üyeliğini ve kullanıcı hesabını hazırlama

Bu komutu sanal master veritabanından çalıştırın.

ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER Jiao;

-- check membership in metadata:
SELECT IS_SRVROLEMEMBER('##MS_ServerStateReader##', 'Jiao');
--> 1 = Yes

SELECT sql_logins.principal_id AS MemberPrincipalID,
    sql_logins.name AS MemberPrincipalName,
    roles.principal_id AS RolePrincipalID,
    roles.name AS RolePrincipalName
FROM sys.server_role_members AS server_role_members
INNER JOIN sys.server_principals AS roles
    ON server_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.sql_logins AS sql_logins
    ON server_role_members.member_principal_id = sql_logins.principal_id;
GO

Sonuç kümesi aşağıdadır.

MemberPrincipalID MemberPrincipalName RolePrincipalID RolePrincipalName
------------- ------------- ------------------ -----------
6         Jiao      11            ##MS_ServerStateReader##

Bu komutu bir kullanıcı veritabanından çalıştırın.

-- Create a database-User for 'Jiao'
CREATE USER Jiao
FROM LOGIN Jiao;
GO

Bölüm 2: Rol üyeliğini test etme

Oturum açma olarak oturum açın Jiao ve örnekte kullanılan kullanıcı veritabanına bağlanın.

-- retrieve server-level permissions of currently logged on User
SELECT * FROM sys.fn_my_permissions(NULL, 'Server');

-- check server-role membership for `##MS_ServerStateReader##` of currently logged on User
SELECT USER_NAME(), IS_SRVROLEMEMBER('##MS_ServerStateReader##');
--> 1 = Yes

-- Does the currently logged in User have the `VIEW DATABASE STATE`-permission?
SELECT HAS_PERMS_BY_NAME(NULL, 'DATABASE', 'VIEW DATABASE STATE');
--> 1 = Yes

-- retrieve database-level permissions of currently logged on User
SELECT * FROM sys.fn_my_permissions(NULL, 'DATABASE');
GO

-- example query:
SELECT * FROM sys.dm_exec_query_stats;
--> will return data since this user has the necessary permission

D. Microsoft Entra oturumları için sunucu düzeyi rolleri denetleme

SQL Veritabanı sunucu düzeyindeki rollerin parçası olan tüm Microsoft Entra oturum açma bilgilerini görmek için sanal master veritabanında bu komutu çalıştırın. Microsoft Entra sunucusu oturum açma bilgileri hakkında daha fazla bilgi için bkz . Microsoft Entra sunucu sorumluları.

SELECT member.principal_id AS MemberPrincipalID,
    member.name AS MemberPrincipalName,
    roles.principal_id AS RolePrincipalID,
    roles.name AS RolePrincipalName
FROM sys.server_role_members AS server_role_members
INNER JOIN sys.server_principals AS roles
    ON server_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.server_principals AS member
    ON server_role_members.member_principal_id = member.principal_id
LEFT JOIN sys.sql_logins AS sql_logins
    ON server_role_members.member_principal_id = sql_logins.principal_id
WHERE member.principal_id NOT IN (
    -- prevent SQL Logins from interfering with resultset
    SELECT principal_id
    FROM sys.sql_logins AS sql_logins
    WHERE member.principal_id = sql_logins.principal_id
);

E. Belirli oturum açma işlemleri için sanal master veritabanı rollerini denetleyin

Sanal master veritabanında, rollerin bob sahip olduğu değerlerle uyumlu olup olmadığını kontrol etmek veya sorumlunuza uygun biçimde değeri değiştirmek için bu komutu çalıştırın.

SELECT DR1.name AS DbRoleName,
    ISNULL(DR2.name, 'No members') AS DbUserName
FROM sys.database_role_members AS DbRMem
RIGHT JOIN sys.database_principals AS DR1
    ON DbRMem.role_principal_id = DR1.principal_id
LEFT JOIN sys.database_principals AS DR2
    ON DbRMem.member_principal_id = DR2.principal_id
WHERE DR1.type = 'R'
    AND DR2.name LIKE 'bob%';

Sunucu düzeyinde rollerin sınırlamaları

  • Rol atamalarının etkili olması 5 dakika kadar sürebilir. Ayrıca mevcut oturumlarda, sunucu rolü atamalarında yapılan değişiklikler, bağlantı kapatılıp yeniden açılana kadar geçerli olmaz. Bunun nedeni veritabanı ile aynı mantıksal sunucudaki master diğer veritabanları arasındaki dağıtılmış mimaridir.

    • Kısmi geçici çözüm: Bekleme süresini kısaltmak ve sunucu rolü atamalarının bir veritabanında güncel olduğundan emin olmak için, bir sunucu yöneticisi veya Microsoft Entra yöneticisi, oturum açma bilgilerinin eriştiği kullanıcı veritabanlarında DBCC FLUSHAUTHCACHE çalıştırabilir. Geçerli oturum açmış kullanıcıların, üyelik değişikliklerinin etkili olması için DBCC FLUSHAUTHCACHE çalıştırıldıktan sonra yeniden bağlanmaları gerekir.
  • IS_SRVROLEMEMBER() veritabanında desteklenmez master .