Megosztás a következőn keresztül:


Oktatóanyag: Microsoft Entra-felhasználók létrehozása Microsoft Entra-alkalmazásokkal

A következőre vonatkozik: Azure SQL Database

Ez a cikk bemutatja, hogyan konfigurálhat egy egyszerű szolgáltatást, hogy Microsoft Entra-felhasználókat hozzon létre az Azure SQL Database-ben. Ez a funkció lehetővé teszi az Azure SQL-erőforrásokhoz való hozzáférés-kezelés programozott konfigurálását a Microsoft Entra-bérlőben lévő felhasználók és alkalmazások számára.

Feljegyzés

A Microsoft Entra ID az Azure Active Directory (Azure AD) új neve. Jelenleg frissítjük a dokumentációt.

Az Azure SQL-hez készült Microsoft Entra-hitelesítésről további információt a Microsoft Entra-hitelesítés használata című cikkben talál.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Identitás hozzárendelése a logikai kiszolgálóhoz
  • A Címtárolvasók szerepkör hozzárendelése a kiszolgálóidentitáshoz
  • Alkalmazás regisztrálása a Microsoft Entra-azonosítóban
  • Adatbázis-felhasználó létrehozása az alkalmazás szolgáltatásnévéhez az Azure SQL Database-ben
  • Microsoft Entra-adatbázis-felhasználó létrehozása a szolgáltatásnévvel

Előfeltételek

Identitás hozzárendelése a logikai kiszolgálóhoz

  1. Csatlakozás az Azure-ba, megadva az SQL-adatbázist üzemeltető Microsoft Entra-bérlőt. A bérlőazonosító a Microsoft Entra ID-erőforrás Áttekintés lapján található az Azure Portalon. Másolja ki a bérlőazonosítót , majd futtassa a következő PowerShell-parancsot:

    • Cserélje le <TenantId> a bérlőazonosítót.
    Connect-AzAccount -Tenant <TenantId>
    

    Jegyezze fel az TenantId oktatóanyag későbbi használatra vonatkozó adatait.

  2. Hozzon létre egy rendszer által hozzárendelt felügyelt identitást, és rendelje hozzá az Azure logikai kiszolgálóhoz. Hajtsa végre a következő PowerShell-parancsot:

    • Cserélje le és <ServerName> cserélje le <ResourceGroupName> az erőforrásait a Set-AzSqlServer parancsban. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a helyére<ServerName>.myserver
    Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity
    
  3. Ellenőrizze, hogy a kiszolgálóidentitás hozzárendelése sikeresen megtörtént-e. Hajtsa végre a következő PowerShell-parancsot:

    • Cserélje le <ResourceGroupName> és <ServerName> használja az erőforrásokat. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a helyére<ServerName>.myserver
    $xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName>
    $xyz.identity
    

    A kimenetnek meg kell jelennie , PrincipalIdTypeés TenantId. A hozzárendelt identitás a PrincipalId.

  4. Az identitást az Azure Portalon is ellenőrizheti.

    • A Microsoft Entra ID erőforrásban nyissa meg a Nagyvállalati alkalmazásokat. Írja be a logikai kiszolgáló nevét. Az erőforráson megjelenő objektumazonosító az elsődleges kiszolgálói identitás azonosítója.

    Screenshot shows where to find the Object ID for an enterprise application.

Kiszolgálóidentitás hozzáadása a Címtárolvasók szerepkörhöz

A kiszolgálóidentitáshoz engedélyekre van szükség a Microsoft Entra-azonosító lekérdezéséhez a felügyeleti funkciókhoz, beleértve a Microsoft Entra-felhasználók és -bejelentkezések létrehozását, valamint a csoportbővítést, hogy felhasználói engedélyeket alkalmazzanak a Microsoft Entra-csoporttagságuk alapján. Ha visszavonják a Microsoft Entra-azonosító lekérdezésére vonatkozó kiszolgálóidentitás-engedélyeket, vagy törlik a kiszolgálóidentitást, a Microsoft Entra-hitelesítés nem működik.

A Microsoft Entra lekérdezési engedélyeinek hozzárendelése a kiszolgálói identitáshoz a címtár-olvasók szerepkörhöz való hozzáadásával vagy a következő, alacsonyabb szintű Microsoft Graph-engedélyek hozzárendelésével:

Feljegyzés

Ezt a szkriptet Egy Microsoft Entra-azonosítónak Global Administrator vagy egy Privileged Role Administrator.

Az alábbi szkript engedélyt ad a Microsoft Entra Directory-olvasóknak egy olyan identitáshoz, amely az Azure SQL Database logikai kiszolgálójának felel meg.

  • Cserélje le a TenantId korábban összegyűjtött helyére<TenantId>.
  • Cserélje le <ServerName> a logikai kiszolgáló nevét. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a helyére<ServerName>.myserver
# This script grants "Directory Readers" permission to a service principal representing a logical server for Azure SQL Database
# It can be executed only by a user who is a member of the **Global Administrator** or **Privileged Role Administrator** role.
# To check if the "Directory Readers" role was granted, re-execute this script

Import-Module Microsoft.Graph.Authentication
$ServerIdentityName = "<ServerName>"    # Enter your logical server name
$TenantId = "<TenantId>"                # Enter your tenant ID

Connect-MgGraph -TenantId "<TenantId>" -Scopes "RoleManagement.ReadWrite.Directory,Application.Read.All"

# Get Microsoft Entra "Directory Readers" role and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
if ($role -eq $null) {
    # Instantiate an instance of the role template
    $roleTemplate = Get-MgDirectoryRoleTemplate -Filter "DisplayName eq '$roleName'"
    New-MgDirectoryRoleTemplate -RoleTemplateId $roleTemplate.Id
    $role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
}

# Get service principal for server
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$ServerIdentityName'"
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No service principal with name '$($ServerIdentityName)' found, make sure that ServerIdentityName parameter was entered correctly."
    exit
}
if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: Multiple service principals with name '$($ServerIdentityName)'"
    Write-Output $roleMember | Format-List DisplayName, Id, AppId
    exit
}

# Check if service principal is already member of Directory Readers role
$isDirReader = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -Filter "Id eq '$($roleMember.Id)'"

if ($isDirReader -eq $null) {
    # Add principal to Directory Readers role
    Write-Output "Adding service principal '$($ServerIdentityName)' to 'Directory Readers' role'..."
    $body = @{
        "@odata.id"= "https://graph.microsoft.com/v1.0/directoryObjects/{$($roleMember.Id)}"
    }
    New-MgDirectoryRoleMemberByRef -DirectoryRoleId $role.Id -BodyParameter $body
    Write-Output "'$($ServerIdentityName)' service principal added to 'Directory Readers' role'."
} else {
    Write-Output "Service principal '$($ServerIdentityName)' is already member of 'Directory Readers' role'."
}

Feljegyzés

A szkript kimenete azt jelzi, hogy az identitás hozzá van-e rendelve a Címtárolvasók szerepkörhöz. Ha nem biztos benne, hogy az engedély meg lett-e adva, újra futtathatja a szkriptet.

A felügyelt SQL-példány címtárolvasói szerepkörének hozzárendelésével kapcsolatos hasonló megközelítésért tekintse meg a Microsoft Entra-rendszergazda (felügyelt SQL-példány) kiépítését ismertető témakört.

Éles környezetben gyakori felügyeleti gyakorlat a Címtárolvasók szerepkör hozzárendelése egy szerepkör-hozzárendelhető csoporthoz a Microsoft Entra ID-ban. Ezután a csoporttulajdonosok hozzáadhatnak felügyelt identitásokat a csoporthoz. Ez fenntartja a minimális jogosultság elvét, és megfelel annak az igénynek, hogy egy globális Rendszergazda istrator vagy privileged role Rendszergazda istrator egyenként adja meg a címtárolvasó szerepkört minden SQL-példánynak. A szolgáltatásról további információt az Azure SQL-hez készült Microsoft Entra ID címtárolvasói szerepkörében talál.

Alkalmazás létrehozása a Microsoft Entra-azonosítóban

Regisztrálja az alkalmazásokat. Az alkalmazás regisztrálásához legalább a Microsoft Entra ID alkalmazásfejlesztői szerepkörre van szüksége. A szerepkörök hozzárendelésével kapcsolatos további információkért lásd : Felhasználói szerepkörök hozzárendelése a Microsoft Entra-azonosítóban.

Ez az oktatóanyag két szolgáltatásnevet használ. Az első szolgáltatásnév, a DBOwnerApp az adatbázis többi felhasználójának létrehozására szolgál. A második szolgáltatásnév, a myapp az az alkalmazás, amelyet a DBOwnerApp létrehoz egy adatbázis-felhasználót az oktatóanyag későbbi részében.

Alkalmazások regisztrálása:

  1. Az Azure Portalon válassza a Microsoft Entra ID> Alkalmazásregisztrációk> New regisztrációt.

    Screenshot shows the Register an application page.

    Az alkalmazásregisztráció létrehozása után az alkalmazás (ügyfél) azonosítójának értéke létrejön és megjelenik. Ebben az oktatóanyagban rögzítse ezt az értéket későbbi használatra.

    Screenshot of the Azure portal that shows the App ID.

  2. Hozzon létre egy ügyfélkulcsot az alkalmazáshoz, amellyel bejelentkezhet. Kövesse a tanúsítvány feltöltését, vagy hozzon létre egy titkos kulcsot a bejelentkezéshez. Ebben az oktatóanyagban rögzítse a DBOwnerApp ügyféltitkát későbbi használatra.

További információkért tekintse át a portálon az erőforrásokhoz hozzáférő Microsoft Entra-alkalmazás és szolgáltatásnév létrehozását ismertető cikket.

A szolgáltatásnév felhasználójának létrehozása

Adja hozzá az újonnan létrehozott szolgáltatásnevet, a DBOwnerAppot felhasználóként az SQL Database-ben, és rendeljen hozzá engedélyeket.

Csatlakozás az SQL Database-hez olyan Microsoft Entra-identitással, amely rendelkezik más felhasználók létrehozására vonatkozó engedélyekkel.

Fontos

Csak a Microsoft Entra-felhasználók hozhatnak létre más Microsoft Entra-felhasználókat az Azure SQL Database-ben. Az SQL-hitelesítésen alapuló felhasználók, köztük a kiszolgáló rendszergazdája sem hozhatnak létre Microsoft Entra-felhasználót. A Microsoft Entra rendszergazdája az egyetlen felhasználó, aki kezdetben létrehozhat más Microsoft Entra-felhasználókat az SQL Database-ben. Miután a Microsoft Entra rendszergazdája létrehozott más felhasználókat, a megfelelő engedélyekkel rendelkező Microsoft Entra-felhasználók más Microsoft Entra-felhasználókat is létrehozhatnak.

  1. Hozza létre a dbOwnerApp felhasználót az SQL Database-ben a következő T-SQL-paranccsal:

    CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER
    GO
    
  2. Más Microsoft Entra-felhasználók létrehozásához legalább az ALTER ANY USER SQL-engedély szükséges. Ez az engedély a Microsoft Entra rendszergazdájaként való tagságon db_ownerés hozzárendelésen keresztül is öröklődik. Az alábbi példák három különböző lehetőséget mutatnak be a DBOwnerApp engedélyeinek hozzárendelésére, amelyek lehetővé teszik, hogy más Microsoft Entra-felhasználókat hozzon létre az adatbázisban.

    A DBOwnerAppot a sp_addrolemember a következőkkel adhatja hozzá a db_owner szerepkörhöz:

    EXEC sp_addrolemember 'db_owner', [DBOwnerApp]
    GO
    

    Az alábbi T-SQL-mintához hasonlóan hozzárendelheti az ALTER ANY USER engedélyt a DBOwnerApphoz :

    GRANT ALTER ANY USER TO [DBOwnerApp]
    GO
    

    A DBOwnerAppot Microsoft Entra-rendszergazdaként állíthatja be. Ez az Azure Portal, a PowerShell vagy az Azure CLI parancsaival végezhető el. További információ: Microsoft Entra-rendszergazda (SQL Database) kiépítése.

Felhasználó létrehozása egyszerű szolgáltatásnévvel

  1. A következő szkripttel hozzon létre egy Microsoft Entra szolgáltatásnév-felhasználót, a myappot a DBOwnerApp szolgáltatásnév használatával:

    • Cserélje le a TenantId korábban összegyűjtött helyére<TenantId>.
    • Cserélje le a ClientId korábban összegyűjtött helyére<ClientId>.
    • Cserélje le <ClientSecret> a korábban létrehozott ügyféltitkot.
    • Cserélje le <ServerName> a logikai kiszolgáló nevét. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a helyére<ServerName>.myserver
    • Cserélje le <database name> az SQL Database nevét.
    # PowerShell script for creating a new SQL user called myapp using application DBOwnerApp with secret
    # DBOwnerApp is an admin for the server
    
    # Download latest  MSAL  - https://www.powershellgallery.com/packages/MSAL.PS
    Import-Module MSAL.PS
    
    $tenantId = "<TenantId>"   # Microsoft Entra tenant ID where DBOwnerApp resides
    $clientId = "<ClientId>"   # Application (client) ID recorded earlier for DBOwnerApp
    $clientSecret = "<ClientSecret>"   # Client secret for DBOwnerApp 
    $scopes = "https://database.windows.net/.default" # The endpoint
    
    $result = Get-MsalToken -RedirectUri $uri -ClientId $clientId -ClientSecret (ConvertTo-SecureString $clientSecret -AsPlainText -Force) -TenantId $tenantId -Scopes $scopes
    
    $Tok = $result.AccessToken
    #Write-host "token"
    $Tok
    
    $SQLServerName = "<ServerName>"    # Logical server name 
    $DatabaseName = "<database name>"   # Azure SQL database name
    
    Write-Host "Create SQL connection string"
    $conn = New-Object System.Data.SqlClient.SQLConnection 
    $conn.ConnectionString = "Data Source=$SQLServerName.database.windows.net;Initial Catalog=$DatabaseName;Connect Timeout=30"
    $conn.AccessToken = $Tok
    
    Write-host "Connect to database and execute SQL script"
    $conn.Open() 
    $ddlstmt = 'CREATE USER [myapp] FROM EXTERNAL PROVIDER;'
    Write-host " "
    Write-host "SQL DDL command"
    $ddlstmt
    $command = New-Object -TypeName System.Data.SqlClient.SqlCommand($ddlstmt, $conn)       
    
    Write-host "results"
    $command.ExecuteNonQuery()
    $conn.Close()
    

    Másik lehetőségként használhatja a következő kódot: Microsoft Entra szolgáltatásnév hitelesítése az Azure SQL Database-hez. Módosítsa a szkriptet a DDL utasítás CREATE USER [myapp] FROM EXTERNAL PROVIDERvégrehajtásához. Ugyanez a szkript használható Microsoft Entra-felhasználó vagy -csoport létrehozására az adatbázisban.

  2. Ellenőrizze, hogy a felhasználó myappja létezik-e az adatbázisban a következő parancs végrehajtásával:

    SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId
    FROM sys.database_principals
    WHERE name = 'myapp'
    GO
    

    Az alábbihoz hasonló kimenetnek kell megjelennie:

    name	type	type_desc	appId
    myapp	E	EXTERNAL_USER	6d228f48-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

Következő lépések