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 szolgáltatásnevet, hogy Microsoft Entra felhasználókat hozhasson létre az Azure SQL-adatbázisban. Ezzel a funkcióval programozott módon kezelheti Azure SQL erőforrásokhoz való hozzáférést a Microsoft Entra-bérlő felhasználói és alkalmazásai számára.

Megjegyzés:

Microsoft Entra ID korábban Azure Active Directory (Azure AD) néven ismerték.

A Azure SQL Microsoft Entra hitelesítéséről további információt a Az Microsoft Entra hitelesítés használata című témakörben talál.

Ebben az oktatóanyagban a következőket sajátíthatja el:

  • 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 ID
  • Adatbázis-felhasználó létrehozása az alkalmazás szolgáltatás-főazonosítójához az Azure SQL Database-ben.
  • Microsoft Entra adatbázis-felhasználó létrehozása szolgáltatási főkulccsal

Előfeltételek

  • Meglévő Azure SQL Database üzembe helyezés. Ez az oktatóanyag feltételezi, hogy rendelkezik egy működő SQL Database-adatbázissal.
  • Microsoft Entra Privileged Role Administrator engedélyek abban a bérlőben, ahol az SQL-adatbázis található.
  • Az Az.Sql PowerShell modul legújabb verziója.
  • A Microsoft.Graph PowerShell-modul legújabb verziója.

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

  1. Csatlakozzon Azure, és adja meg az SQL-adatbázist üzemeltető Microsoft Entra bérlőt. A Bérlőazonosító a Overview lapon található a Microsoft Entra ID erőforrásnál az Azure portálon. Másolja ki a bérlőazonosítót , majd futtassa a következő PowerShell-parancsot:

    • Cserélje le <TenantId> a Tenant ID azonosítójára.
    Connect-AzAccount -Tenant <TenantId>
    

    Jegyezze fel az TenantId a későbbi használathoz ebben az oktatóanyagban.

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

    • Cserélje le <ResourceGroupName> és <ServerName> erőforrásokkal a Set-AzSqlServer parancsban. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a <ServerName>-t a myserver-re.
    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> erőforrásokkal. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a <ServerName>-t a myserver-re.
    $xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName>
    $xyz.identity
    

    A kimenet az PrincipalId, Type, és TenantId. A hozzárendelt identitás a PrincipalId.

  4. Az identitást a Azure portálon is ellenőrizheti.

    • A Microsoft Entra ID erőforrásban nyissa meg a Enterprise 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.

    Képernyőkép arról, hogy hol található egy vállalati alkalmazás objektumazonosítója.

Jótanács

A rendszer által hozzárendelt felügyelt identitás alternatívaként használhat felhasználó által hozzárendelt felügyelt identitást. A felhasználó által hozzárendelt felügyelt identitások több logikai kiszolgálón is megoszthatók, ami csökkenti a felügyelt identitások számát, és leegyszerűsíti a szerepkör-hozzárendeléseket. További információ: Felhasználó által hozzárendelt felügyelt identitás a Microsoft Entra ID az Azure SQL-hez.

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 felügyeleti függvények Microsoft Entra ID lekérdezéséhez, beleértve a Microsoft Entra felhasználók és bejelentkezések létrehozását, valamint a csoportbővítést a felhasználói engedélyek Microsoft Entra csoporttagságuk alapján történő alkalmazásához. Ha a Microsoft Entra ID lekérdezésére vonatkozó kiszolgálóidentitás-engedélyeket visszavonják, vagy törlik a kiszolgálóidentitást, Microsoft Entra hitelesítés leáll.

Microsoft Entra lekérdezési engedélyek hozzárendelése a kiszolgálóidentitáshoz a Könyvtá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:

Megjegyzés:

Ezt a szkriptet Microsoft Entra Privileged Role Administrator vagy magasabb szerepkörrel kell végrehajtani.

Az alábbi szkript engedélyt ad a Microsoft Entra Directory Readers csoportnak egy olyan identitásra, amely az Azure SQL Database logikai kiszolgálót képviseli.

  • Cserélje le a <TenantId> az előzőleg begyűjtött TenantId-re.
  • Cserélje le <ServerName> a logikai kiszolgáló nevét. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a <ServerName>-t a myserver-re.
# 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 **Privileged Role Administrator** or higher 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'."
}

Megjegyzés:

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

A Directory Readers szerepkörnek az SQL Managed Instance-hez való hozzárendeléséről szóló hasonló megközelítésről olvassa el a(z) Set Microsoft Entra admin részt.

Éles környezetben gyakran alkalmazott felügyeleti gyakorlat a Könyvtárolvasók szerepkör hozzárendelése egy szerepkör-hozzárendelhető csoporthoz a Microsoft Entra ID-ben. Ezután a csoporttulajdonosok hozzáadhatnak felügyelt identitásokat a csoporthoz. Ez fenntartja a minimális jogosultság elvét, és megkerüli annak szükségességét, hogy a kiemelt szerepkör-rendszergazda külön-külön adja meg a címtár-olvasók szerepkört minden SQL példánynak. A funkcióval kapcsolatos további információkért lásd: A Microsoft Entra ID Könyvtárolvasók szerepköre Azure SQL.

Alkalmazás létrehozása Microsoft Entra ID

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

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, amelynek a felhasználását a DBOwnerApp az oktatóanyag későbbi részében egy adatbázis-felhasználó létrehozására tervezi.

Alkalmazások regisztrálása:

  1. A Azure portálon válassza a Microsoft Entra ID>App registrations>Új regisztráció lehetőséget.

    Képernyőkép az Alkalmazás regisztrálása lapról.

    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.

    Az Azure portál azon képernyőképe, amely az alkalmazásazonosítót mutatja.

  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ó: A portál használatával hozzon létre egy Microsoft Entra alkalmazást és szolgáltatásnevet, amely hozzáfér az erőforrásokhoz.

A szolgáltatásnévi felhasználó 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.

Csatlakozzon az SQL Database-hez egy Microsoft Entra identitás használatával, amely rendelkezik más felhasználók létrehozására vonatkozó engedélyekkel.

Fontos

Csak Microsoft Entra felhasználók hozhatnak létre más Microsoft Entra felhasználókat Azure SQL Database. Az SQL-hitelesítésen alapuló felhasználók , beleértve a kiszolgáló rendszergazdát is, nem hozhatnak létre Microsoft Entra felhasználót. A Microsoft Entra rendszergazda az egyetlen felhasználó, aki kezdetben más Microsoft Entra felhasználókat hozhat létre 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 a ALTER ANY USER SQL-engedély szükséges. Ezt az engedélyt a db_owner tagsága és a Microsoft Entra rendszergazdai hozzárendelése is örökli. 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 DBOwnerApp szerepkörhöz az db_owner szerepet a sp_addrolemember segítségével adhatja hozzá:

    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
    

    Beállíthatja a DBOwnerApp Microsoft Entra rendszergazdaként. Használja a Azure portált, a PowerShellt vagy Azure CLI parancsokat. További információkért lásd: Microsoft Entra rendszergazda beállítása.

Felhasználó létrehozása szolgáltatás helyettes segítségével

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

    • Cserélje le a <TenantId> az előzőleg begyűjtött TenantId-re.
    • Cserélje le a <ClientId> az előzőleg begyűjtött ClientId-re.
    • Cserélje le a <ClientSecret> a korábban létrehozott ügyféltitokra.
    • Cserélje le <ServerName> a logikai kiszolgáló nevét. Ha a kiszolgáló neve az myserver.database.windows.net, cserélje le a <ServerName>-t a myserver-re.
    • Cserélje le <database name> saját SQL-adatbázisának nevére.

    Megjegyzés:

    A következő szkripthez a Microsoft.Data.SqlClient szerelvény szükséges. Telepítse a NuGet-csomagból és töltse be a DLL-t Add-Type -Path "path\to\Microsoft.Data.SqlClient.dll" a szkript futtatása előtt.

    # 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 Microsoft.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 Microsoft.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ásfőnöki hitelesítés Azure SQL Database. Módosítsa a szkriptet a DDL utasítás CREATE USER [myapp] FROM EXTERNAL PROVIDERvégrehajtásához. Ugyanezzel a szkripttel hozzon létre egy Microsoft Entra felhasználót vagy csoportot 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
    

    Hasonló kimenetnek kell megjelennie:

    name    type    type_desc    appId
    myapp    E    EXTERNAL_USER    aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb