Öğretici: Microsoft Entra sunucusu oturum açma bilgilerini oluşturma ve kullanma

Şunlar için geçerlidir:Azure SQL VeritabanıAzure SQL Yönetilen ÖrnekAzure Synapse Analytics (yalnızca ayrılmış SQL havuzları)

Bu makale, Azure SQL'in sanal master veritabanında Microsoft Entra ID (eski adıyla Azure Active Directory) tarafından desteklenen oturum açma bilgilerini nasıl oluşturacağınızı ve kullanacağınızı açıklar.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure SQL Veritabanı için yeni söz dizimi uzantısını kullanarak sanal master veritabanında bir Microsoft Entra oturum açma hesabı oluşturun
  • Sanal master veritabanında Microsoft Entra oturum açma bilgilerine eşlenmiş bir kullanıcı oluşturma
  • Nonunique görünen adlar için WITH OBJECT_ID söz dizimini kullanın
  • Microsoft Entra kullanıcısına sunucu rolleri verme
  • Microsoft Entra oturum açmayı devre dışı bırakın

Önkoşullar

Not

Microsoft Entra ID'de benzersiz olmayan görünen adlarla ilgilenen kuruluşlar (özellikle hizmet ilkesileri için), oturum açmayı planladığınız hizmet ilkesileriyle ilgili Nesne Kimliği bilgilerine sahip olduğunuzdan emin olun. Söz WITH OBJECT_ID dizimi uzantısı bu senaryoların çözülmesine yardımcı olabilir.

Microsoft Entra oturum açma oluştur

  1. Microsoft Entra hesabı için Azure SQL Veritabanı oturum açma bilgileri oluşturun. Örneğimizde, contoso adlı Microsoft Entra etki alanımızda bulunan bob@contoso.com öğesini kullanacağız. Oturum açma bilgileri bir Microsoft Entra grubundan veya hizmet sorumlusundan (uygulamalar) da oluşturulabilir. Örneğin, mygroup, o grubun üyesi olan Microsoft Entra hesaplarından oluşan bir Microsoft Entra grubudur. Daha fazla bilgi için bkz . CREATE LOGIN (Transact-SQL).

    Not

    İlk Microsoft Entra oturum açma bilgileri Microsoft Entra yöneticisi tarafından oluşturulmalıdır. Microsoft Entra yöneticisi bir Microsoft Entra kullanıcısı veya grubu olabilir. SQL oturum açma bilgileri Microsoft Entra oturum açma bilgileri oluşturamaz.

    İpucu

    Microsoft Entra ID'de benzersiz olmayan görünen adlarla ilgili sorunlarla karşılaşırsanız sözdizimi uzantısını kullanabilirsiniz. Bu özellik, yinelenen görünen adlara sahip hizmet sorumluları için özellikle kullanışlıdır. Örneğin:

    CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
    

    Daha fazla bilgi için bkz Microsoft Entra oturum açma bilgileri ve benzersiz olmayan görünen adlara sahip kullanıcılar.

  2. SQL Server Management Studio'yu (SSMS) kullanarak, sunucu için ayarlanmış Microsoft Entra yönetici hesabıyla SQL Veritabanı oturum açın.

  3. Genişletin Veritabanları>Sistem Veritabanları. veritabanına sağ tıklayın ve veritabanı bağlamında yeni bir sorgu penceresi açmak için Yeni Sorgu seçin.

  4. Aşağıdaki sorguyu çalıştırın:

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. sys.server_principals içinde oluşturulan oturum açma bilgilerini denetleyin. Aşağıdaki sorguyu yürütür:

    SELECT name, type_desc, type, is_disabled
    FROM sys.server_principals
    WHERE type_desc like 'external%'
    

    Aşağıdakine benzer bir çıktı görürsünüz:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  6. Oturum açma bilgileri bob@contoso.com sanal master veritabanında oluşturulmuştur.

Microsoft Entra oturumundan kullanıcı oluşturma

  1. Artık bir Microsoft Entra oturum açma bilgisi oluşturduğumuza göre, sanal master veritabanındaki Microsoft Entra oturum açma bilgilerine eşlenmiş veritabanı düzeyinde bir Microsoft Entra kullanıcısı oluşturabiliriz. Kullanıcıyı özel rollere eklemeyi göstermek istediğimizden, sanal bob@contoso.com veritabanında bir kullanıcı oluşturmak için örneğimizi master kullanmaya devam edeceğiz. Sanal master veritabanında yalnızca bir Microsoft Entra yöneticisi veya SQL server yöneticisi kullanıcı oluşturabilir.

  2. Sanal master veritabanını kullanmaya devam ediyoruz, ancak diğer veritabanlarında kullanıcı oluşturmak istiyorsanız istediğiniz bir veritabanına yeniden bağlanabilirsiniz. Aşağıdaki sorguyu çalıştırın.

    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    İpucu

    Microsoft Entra kullanıcı diğer adlarının (örneğin, bob@contoso.com) kullanılması gerekli olmasa da, Microsoft Entra kullanıcıları ve Microsoft Entra oturumları için aynı diğer adı kullanmak önerilen bir en iyi uygulamadır.

    Belirli bir Nesne Kimliğine sahip bir dış sağlayıcıdan doğrudan kullanıcı oluşturmanız gerekiyorsa (örneğin, eşsiz olmayan görünen ad sorunlarını çözmek için), şunları da kullanabilirsiniz:

    CREATE USER [user_name] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'objectid'
    
  3. içinde sys.database_principalsoluşturulan kullanıcıyı denetleyin. Aşağıdaki sorguyu yürütür:

    SELECT name, type_desc, type
    FROM sys.database_principals
    WHERE type_desc like 'external%'
    

    Aşağıdakine benzer bir çıktı görürsünüz:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Not

Microsoft Entra oturum açma hesabı olmadan bir Microsoft Entra kullanıcısı oluşturmak için kullanılan mevcut söz dizimi hâlâ desteklenmektedir. Aşağıdaki söz diziminin yürütülmesi, bağlı olduğunuz belirli veritabanının içinde yer alan bir kullanıcı oluşturur. Önemli olan, sanal master veritabanında aynı ada sahip bir oturum açma bilgisi bulunsa bile bu kullanıcının herhangi bir oturum açma işlemiyle ilişkili olmamasıdır.

Örneğin, CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER.

Benzersiz olmayan görünen ada sahip bir hizmet sorumlusu kullanarak Microsoft Entra oturum açma işlemi oluşturabilirsiniz. Daha fazla bilgi için bkz. Microsoft Entra oturum açma işlemleri ve benzersiz olmayan görünen adlara sahip kullanıcılar

Microsoft Entra oturum açma bilgilerine sunucu düzeyinde roller verme

sabit sunucu düzeyi rollerine, örneğin master veritabanındaki ##MS_DefinitionReader##, ##MS_ServerStateReader## veya ##MS_ServerStateManager## rolüne, oturum açma adları ekleyebilirsiniz.

Not

Burada bahsedilen sunucu düzeyindeki roller Microsoft Entra grupları için desteklenmez.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

kullanıcı yeniden bağlanana kadar izinler geçerli olmaz. DBCC önbelleğini de temizleyin:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Hangi Microsoft Entra oturum açma bilgilerinin sunucu düzeyindeki rollerin parçası olduğunu denetlemek için aşağıdaki sorguyu çalıştırın:

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       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 members
       ON server_role_members.member_principal_id = members.principal_id;

Microsoft Entra kullanıcıları için özel roller verme

SQL Veritabanı için özel roller, sanal master veritabanındaki kullanıcılara atanabilir.

Kullanıcıya özel veritabanı rollerinden birini vermek için kullanıcının sanal master veritabanında mevcut olması gerekir.

Bir role kullanıcı eklemek için aşağıdaki sorguyu çalıştırabilirsiniz:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Bir kullanıcıyı rolden kaldırmak için aşağıdaki sorguyu çalıştırın:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object, Microsoft Entra ID'de bir Microsoft Entra kullanıcısı, grup veya hizmet sorumlusu olabilir.

Örneğimizde kullanıcısını bob@contoso.comoluşturduk. Kullanıcıya dbmanager ve loginmanager rollerini verelim.

  1. Aşağıdaki sorguyu çalıştırın:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Aşağıdaki sorguyu çalıştırarak veritabanı rolü atamasını denetleyin:

    SELECT DP1.name AS DatabaseRoleName,
      isnull (DP2.name, 'No members') AS DatabaseUserName
    FROM sys.database_role_members AS DRM
    RIGHT OUTER JOIN sys.database_principals AS DP1
      ON DRM.role_principal_id = DP1.principal_id
    LEFT OUTER JOIN sys.database_principals AS DP2
      ON DRM.member_principal_id = DP2.principal_id
    WHERE DP1.type = 'R'and DP2.name like 'bob%'
    

    Aşağıdakine benzer bir çıktı görürsünüz:

    DatabaseRoleName       DatabaseUserName
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

İsteğe bağlı - Oturum açmayı devre dışı bırakma

ALTER LOGIN (Transact-SQL) DDL söz dizimi, Azure SQL Veritabanı bir Microsoft Entra oturum açma özelliğini etkinleştirmek veya devre dışı bırakmak için kullanılabilir.

ALTER LOGIN [bob@contoso.com] DISABLE

veya DISABLE değişikliklerinin ENABLE hemen etkili olması için kimlik doğrulama önbelleği ve TokenAndPermUserStore önbelleği aşağıdaki T-SQL komutları kullanılarak temizlenmelidir:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Aşağıdaki sorguyu yürüterek oturum açmanın devre dışı bırakıldığını denetleyin:

SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1

Buna bir kullanım örneği olarak, coğrafi çoğaltmalar üzerinde salt okunur erişime izin vermek, ancak birincil sunucuya bağlantıyı reddetmek verilebilir.