Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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
masterdiğ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çinDBCC FLUSHAUTHCACHEçalıştırıldıktan sonra yeniden bağlanmaları gerekir.
- 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
IS_SRVROLEMEMBER()veritabanında desteklenmezmaster.