Dela via


Självstudie: Migrera Windows-användare och -grupper i en SQL Server-instans till Azure SQL Managed Instance med hjälp av T-SQL DDL-syntax

Gäller för:Azure SQL Managed Instance

Den här artikeln beskriver hur du migrerar dina lokala Windows-användare och -grupper i SQL Server till Azure SQL Managed Instance med hjälp av T-SQL-syntax.

I den här självstudien lär du dig att:

  • Skapa inloggningar för SQL Server
  • Skapa en testdatabas för migrering
  • Skapa inloggningar, användare och roller
  • Säkerhetskopiera och återställa databasen till SQL Managed Instance (MI)
  • Migrera användare till MI manuellt med ALTER USER-syntax
  • Testa autentisering med nya mappade användare

Kommentar

Microsoft Entra-ID är det nya namnet för Azure Active Directory (Azure AD). Vi uppdaterar dokumentationen just nu.

Förutsättningar

För att slutföra den här självstudien gäller följande krav:

T-SQL DDL-syntax

Nedan visas T-SQL DDL-syntaxen som används för migrering av Windows-användare och -grupper från en SQL Server-instans till SQL Managed Instance med Microsoft Entra-autentisering.

-- For individual Windows users with logins
ALTER USER [domainName\userName] WITH LOGIN = [loginName@domainName.com];

--For individual groups with logins
ALTER USER [domainName\groupName] WITH LOGIN=[groupName]

Argument

domainName
Anger användarens domännamn.

userName
Anger namnet på den användare som identifieras i databasen.

= loginName@domainName.com
Mappar om en användare till Microsoft Entra-inloggningen

groupName
Anger namnet på den grupp som identifieras i databasen.

Del 1: Skapa inloggningar i SQL Server för Windows-användare och -grupper

Viktigt!

Följande syntax skapar en användare och en gruppinloggning i SQL Server. Du måste se till att användaren och gruppen finns i Active Directory (AD) innan du kör syntaxen nedan.

Användare: testUser1, testGroupUser
Group: migration – testGroupUser måste tillhöra migreringsgruppen i AD

Exemplet nedan skapar en inloggning i SQL Server för ett konto med namnet testUser1 under domänen aadsqlmi.

-- Sign into SQL Server as a sysadmin or a user that can create logins and databases

use master;  
go

-- Create Windows login
create login [aadsqlmi\testUser1] from windows;
go;

/** Create a Windows group login which contains one user [aadsqlmi\testGroupUser].
testGroupUser will need to be added to the migration group in Active Directory
**/
create login [aadsqlmi\migration] from windows;
go;


-- Check logins were created
select * from sys.server_principals;
go;

Skapa en databas för det här testet.

-- Create a database called [migration]
create database migration
go

Del 2: Skapa Windows-användare och -grupper och lägg sedan till roller och behörigheter

Använd följande syntax för att skapa testanvändaren.

use migration;  
go

-- Create Windows user [aadsqlmi\testUser1] with login
create user [aadsqlmi\testUser1] from login [aadsqlmi\testUser1];
go

Kontrollera användarbehörigheterna:

-- Check the user in the Metadata
select * from sys.database_principals;
go

-- Display the permissions – should only have CONNECT permissions
select user_name(grantee_principal_id), * from sys.database_permissions;
go

Skapa en roll och tilldela testanvändaren till den här rollen:

-- Create a role with some permissions and assign the user to the role
create role UserMigrationRole;
go

grant CONNECT, SELECT, View DATABASE STATE, VIEW DEFINITION to UserMigrationRole;
go

alter role UserMigrationRole add member [aadsqlmi\testUser1];
go

Använd följande fråga för att visa användarnamn som tilldelats en viss roll:

-- Display user name assigned to a specific role
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'
ORDER BY DP1.name;

Använd följande syntax för att skapa en grupp. Lägg sedan till gruppen i rollen db_owner.

-- Create Windows group
create user [aadsqlmi\migration] from login [aadsqlmi\migration];
go

-- ADD 'db_owner' role to this group
sp_addrolemember 'db_owner', 'aadsqlmi\migration';
go

--Check the db_owner role for 'aadsqlmi\migration' group
select is_rolemember('db_owner', 'aadsqlmi\migration')
go
-- Output  ( 1 means YES)

Skapa en testtabell och lägg till vissa data med hjälp av följande syntax:

-- Create a table and add data
create table test ( a int, b int);
go

insert into test values (1,10)
go

-- Check the table values
select * from test;
go

Del 3: Säkerhetskopiera och återställa den enskilda användardatabasen till SQL Managed Instance

Skapa en säkerhetskopia av migreringsdatabasen med hjälp av artikeln Kopiera databaser med säkerhetskopiering och återställning, eller använd följande syntax:

use master;
go
backup database migration to disk = 'C:\Migration\migration.bak';
go

Följ vår snabbstart: Återställa en databas till en SQL-hanterad instans.

Del 4: Migrera användare till SQL Managed Instance

Kör kommandot ALTER USER för att slutföra migreringsprocessen på SQL Managed Instance.

  1. Logga in på din SQL Managed Instance med hjälp av Microsoft Entra-administratörskontot för SQL Managed Instance. Skapa sedan din Microsoft Entra-inloggning i SQL Managed Instance med hjälp av följande syntax. Mer information finns i Självstudie: SQL Managed Instance-säkerhet i Azure SQL Database med microsoft Entra-serverhuvudnamn (inloggningar)..

    use master
    go
    
    -- Create login for AAD user [testUser1@aadsqlmi.net]
    create login [testUser1@aadsqlmi.net] from external provider
    go
    
    -- Create login for the Azure AD group [migration]. This group contains one user [testGroupUser@aadsqlmi.net]
    create login [migration] from external provider
    go
    
    --Check the two new logins
    select * from sys.server_principals
    go
    
  2. Kontrollera migreringen för rätt databas, tabell och huvudnamn.

    -- Switch to the database migration that is already restored for MI
    use migration;
    go
    
    --Check if the restored table test exist and contain a row
    select * from test;
    go
    
    -- Check that the SQL on-premises Windows user/group exists  
    select * from sys.database_principals;
    go
    -- the old user aadsqlmi\testUser1 should be there
    -- the old group aadsqlmi\migration should be there
    
  3. Använd syntaxen ALTER USER för att mappa den lokala användaren till Microsoft Entra-inloggningen.

    /** Execute the ALTER USER command to alter the Windows user [aadsqlmi\testUser1]
    to map to the Azure AD user testUser1@aadsqlmi.net
    **/
    alter user [aadsqlmi\testUser1] with login = [testUser1@aadsqlmi.net];
    go
    
    -- Check the principal
    select * from sys.database_principals;
    go
    -- New user testUser1@aadsqlmi.net should be there instead
    --Check new user permissions  - should only have CONNECT permissions
    select user_name(grantee_principal_id), * from sys.database_permissions;
    go
    
    -- Check a specific role
    -- Display Db user name assigned to a specific role
    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'
    ORDER BY DP1.name;
    
  4. Använd syntaxen ALTER USER för att mappa den lokala gruppen till Microsoft Entra-inloggningen.

    /** Execute ALTER USER command to alter the Windows group [aadsqlmi\migration]
    to the Azure AD group login [migration]
    **/
    alter user [aadsqlmi\migration] with login = [migration];
    -- old group migration is changed to Azure AD migration group
    go
    
    -- Check the principal
    select * from sys.database_principals;
    go
    
    --Check the group permission - should only have CONNECT permissions
    select user_name(grantee_principal_id), * from sys.database_permissions;
    go
    
    --Check the db_owner role for 'aadsqlmi\migration' user
    select is_rolemember('db_owner', 'migration')
    go
    -- Output 1 means 'YES'
    

Del 5: Testa Microsoft Entra-användar- eller gruppautentisering

Testa autentisering till SQL Managed Instance med hjälp av användaren som tidigare mappats till Microsoft Entra-inloggningen med hjälp av ALTER USER-syntaxen.

  1. Logga in på den federerade virtuella datorn med din Azure SQL Managed Instance-prenumeration som aadsqlmi\testUser1

  2. Använd SQL Server Management Studio (SSMS) och logga in på din SQL Managed Instance med hjälp av Active Directory-integrerad autentisering och ansluter till databasen migration.

    1. Du kan också logga in med autentiseringsuppgifterna testUser1@aadsqlmi.net med SSMS-alternativet Active Directory – Universal med MFA-stöd. I det här fallet kan du dock inte använda mekanismen Enkel inloggning och du måste ange ett lösenord. Du behöver inte använda en federerad virtuell dator för att logga in på din SQL Managed Instance.
  3. Som en del av rollmedlemmen SELECT kan du välja från test tabellen

    Select * from test  --  and see one row (1,10)
    

Testa autentisering till en SQL Managed Instance med en medlem i en Windows-grupp migration. Användaren aadsqlmi\testGroupUser bör ha lagts till i gruppen migration före migreringen.

  1. Logga in på den federerade virtuella datorn med din Azure SQL Managed Instance-prenumeration som aadsqlmi\testGroupUser

  2. Anslut till Azure SQL Managed Instance-servern och databasen med hjälp av SSMS med integrerad Active Directory-autentisering migration

    1. Du kan också logga in med autentiseringsuppgifterna testGroupUser@aadsqlmi.net med SSMS-alternativet Active Directory – Universal med MFA-stöd. I det här fallet kan du dock inte använda mekanismen Enkel inloggning och du måste ange ett lösenord. Du behöver inte använda en federerad virtuell dator för att logga in på din SQL Managed Instance.
  3. Som en del av db_owner rollen kan du skapa en ny tabell.

    -- Create table named 'new' with a default schema
    Create table dbo.new ( a int, b int)
    

Kommentar

På grund av ett känt designproblem för Azure SQL Database misslyckas en skapa en tabellsats som körs som medlem i en grupp med följande fel:


Msg 2760, Level 16, State 1, Line 4 The specified schema name "testGroupUser@aadsqlmi.net" either does not exist or you do not have permission to use it.
Den aktuella lösningen är att skapa en tabell med ett befintligt schema i fallet ovan <dbo.new>

Nästa steg

Självstudie: Migrera SQL Server till Azure SQL Managed Instance offline med DMS