İzin yönetimi için sunucu rollerini Azure SQL Veritabanı
Ş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ı olması için, oturum açma bilgilerinin tüm veritabanlarına veren CONNECT
sunucu düzeyinde rolüne ##MS_DatabaseConnector##
üye olması veya tek tek veritabanlarında 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 STATE
sahiptir. Bu rolün üyesi olan bir oturum açma işleminin ve veritabanlarında master
bir kullanıcı hesabı varsa, bu kullanıcının bu iki veritabanında izni VIEW DATABASE STATE
vardır.WideWorldImporters
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ı yöneticisinde izinler 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 bilgilerini sunucu düzeyindeki rollere üye olarak ekleyebilirsiniz.
Ö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 bkz. SQL Veritabanı, SQL Yönetilen Örneği ve Azure Synapse Analytics'e veritabanı erişimini yetkilendirme.
Sunucu düzeyinde roller düzeltildi
Aşağıdaki tabloda sabit sunucu düzeyindeki roller ve bunların özellikleri gösterilmektedir.
Sunucu düzeyinde rol düzeltildi | 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 DENY CONNECT veritabanı-kullanıcı izni oluşturabilir. Bu DENY izin, bu rolden gelen izni geçersiz kıldırıyor GRANT CONNECT . |
##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 master var olan dbmanager veritabanı düzeyi rolü üzerinde kullanmalısınız. |
##MS_DefinitionReader## |
Sabit sunucu rolünün ##MS_DefinitionReader## üyeleri, bu rolün üyesinin VIEW ANY DEFINITION kullanı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ü içinde mevcut master olan loginmanager veritabanı düzeyi rolü üzerinde kullanmalısınız. |
##MS_SecurityDefinitionReader## |
Sabit sunucu rolünün ##MS_SecurityDefinitionReader## üyeleri, kapsamındaki VIEW ANY SECURITY DEFINITION tüm katalog görünümlerini okuyabilir ve sırasıyla bu rolün üyesinin kullanıcı hesabına sahip VIEW SECURITY DEFINITION olduğu tüm veritabanlarında izni vardır. Bu, sunucu rolünün erişimi olan ##MS_DefinitionReader## şeyin küçük bir alt kümesidir. |
##MS_ServerStateManager## |
Sabit sunucu rolünün ##MS_ServerStateManager## üyeleri rolle aynı izinlere ##MS_ServerStateReader## 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 DATABASE STATE kapsamındaki tüm dinamik yönetim görünümlerini (DMV) ve işlevleri VIEW SERVER STATE okuyabilir. |
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.
Sunucu düzeyinde rol düzeltildi | 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üzeyindeki 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 | Her SQL oturumu için bir satır döndürür. |
ALTER SERVER ROLE | Command | Sunucu rolünün üyeliğini 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 deyim, ve sys.sql_logins
katalog görünümlerini kullanarak herhangi bir sabit sunucu düzeyinde rolün tüm üyelerini sys.server_role_members
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 oturum açma bilgileri için sunucu düzeyinde 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
Rollerin bob
sahip olup olmadığını denetlemek için sanal master
veritabanında bu komutu çalıştırın veya değeri sorumlunuzla eşleşecek şekilde değiştirin.
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 veritabanında, sunucu yöneticisinde veya Microsoft Entra yöneticisinde geçerli olduğundan emin olmak için oturum açma bilgilerinin eriştiği kullanıcı veritabanlarında çalışabilir
DBCC FLUSHAUTHCACHE
. Geçerli oturum açmış kullanıcıların, üyelik değişikliklerinin bu kullanıcılar üzerinde etkili olması için çalıştırdıktanDBCC FLUSHAUTHCACHE
sonra yeniden bağlanması gerekir.
- Kısmi geçici çözüm: Bekleme süresini kısaltmak ve sunucu rolü atamalarının veritabanında, sunucu yöneticisinde veya Microsoft Entra yöneticisinde geçerli olduğundan emin olmak için oturum açma bilgilerinin eriştiği kullanıcı veritabanlarında çalışabilir
IS_SRVROLEMEMBER()
veritabanında desteklenmezmaster
.