Kurz: Migrace uživatelů a skupin Windows v instanci SQL Serveru do Azure SQL Managed Instance pomocí syntaxe T-SQL DDL

Platí pro:Azure SQL Managed Instance

Tento článek vás provede procesem migrace místních uživatelů a skupin Windows na SQL Serveru do služby Azure SQL Managed Instance pomocí syntaxe T-SQL.

V tomto kurzu se naučíte:

  • Vytvoření přihlášení pro SQL Server
  • Vytvoření testovací databáze pro migraci
  • Vytváření přihlášení, uživatelů a rolí
  • Zálohování a obnovení databáze do služby SQL Managed Instance (MI)
  • Ruční migrace uživatelů do MI pomocí syntaxe ALTER USER
  • Testování ověřování s novými namapovanými uživateli

Poznámka:

ID Microsoft Entra se dříve označovalo jako Azure Active Directory (Azure AD).

Požadavky

K dokončení tohoto kurzu platí následující požadavky:

Syntaxe T-SQL DDL

Níže je uvedena syntaxe T-SQL DDL, která slouží k podpoře migrace uživatelů a skupin Windows z instance SQL Serveru do spravované instance SQL s ověřováním Microsoft Entra.

-- 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]

Argumenty

domainName
Určuje název domény uživatele.

userName
Určuje jméno uživatele identifikovaného uvnitř databáze.

= loginName@domainName.com
Přemapuje uživatele na přihlášení Microsoft Entra.

groupName
Určuje název skupiny identifikované uvnitř databáze.

Část 1: Vytvoření přihlášení na SQL Serveru pro uživatele a skupiny Windows

Důležité

Následující syntaxe vytvoří uživatele a přihlášení ke skupině na SQL Serveru. Před spuštěním následující syntaxe se musíte ujistit, že uživatel a skupina existují ve vaší službě Active Directory (AD).

Uživatelé: testUser1, testGroupUser
Group: migrace – testGroupUser musí patřit do skupiny migrace v AD.

Následující příklad vytvoří přihlášení na SQL Serveru pro účet s názvem testUser1 v doméně 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;

Vytvořte databázi pro tento test.

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

Část 2: Vytvoření uživatelů a skupin Systému Windows a následné přidání rolí a oprávnění

K vytvoření testovacího uživatele použijte následující syntaxi.

use migration;  
go

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

Zkontrolujte uživatelská oprávnění:

-- 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

Vytvořte roli a přiřaďte testovacího uživatele k této roli:

-- 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

Pomocí následujícího dotazu zobrazíte uživatelská jména přiřazená ke konkrétní roli:

-- 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;

K vytvoření skupiny použijte následující syntaxi. Potom přidejte skupinu do role 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)

Vytvořte testovací tabulku a přidejte některá data pomocí následující syntaxe:

-- 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

Část 3: Zálohování a obnovení individuální uživatelské databáze do služby SQL Managed Instance

Vytvořte zálohu databáze migrace pomocí článku Kopírovat databáze se zálohováním a obnovením nebo použijte následující syntaxi:

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

Postupujte podle našeho rychlého startu: Obnovení databáze do spravované instance SQL.

Část 4: Migrace uživatelů do služby SQL Managed Instance

Spuštěním příkazu ALTER USER dokončete proces migrace ve službě SQL Managed Instance.

  1. Přihlaste se ke službě SQL Managed Instance pomocí účtu správce Microsoft Entra pro službu SQL Managed Instance. Pak ve spravované instanci SQL vytvořte své přihlašovací jméno Microsoft Entra pomocí následující syntaxe. Další informace najdete v tématu Kurz: Zabezpečení služby SQL Managed Instance ve službě Azure SQL Database pomocí instančních objektů serveru Microsoft Entra (přihlášení).

    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. Zkontrolujte, jestli migrace obsahuje správnou databázi, tabulku a objekty zabezpečení.

    -- 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. Pomocí syntaxe ALTER USER namapujte místního uživatele na přihlášení Microsoft Entra.

    /** 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. Pomocí syntaxe ALTER USER namapujte místní skupinu na přihlášení Microsoft Entra.

    /** 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'
    

Část 5: Testování ověřování uživatelů nebo skupin Microsoft Entra

Otestujte ověřování ve službě SQL Managed Instance pomocí uživatele dříve namapovaného na přihlášení Microsoft Entra pomocí syntaxe ALTER USER.

  1. Přihlaste se k federovaného virtuálnímu počítači pomocí předplatného služby Azure SQL Managed Instance jako aadsqlmi\testUser1

  2. Pomocí aplikace SQL Server Management Studio (SSMS) se přihlaste ke službě SQL Managed Instance pomocí integrovaného ověřování služby Active Directory a připojte se k databázi migration.

    1. Můžete se také přihlásit pomocí testUser1@aadsqlmi.net přihlašovacích údajů s možností Active Directory SSMS – Universal s podporou MFA. V tomto případě ale nemůžete použít mechanismus Jednotné přihlašování a musíte zadat heslo. K přihlášení ke spravované instanci SQL nebudete muset použít federovaný virtuální počítač.
  3. Jako součást člena role SELECT můžete vybrat z test tabulky.

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

Otestujte ověřování ve službě SQL Managed Instance pomocí člena skupiny migrationSystému Windows . Uživatel aadsqlmi\testGroupUser by měl být před migrací přidán do skupiny migration .

  1. Přihlaste se k federovaného virtuálnímu počítači pomocí předplatného služby Azure SQL Managed Instance jako aadsqlmi\testGroupUser

  2. Pomocí SSMS s integrovaným ověřováním Active Directory se připojte k serveru azure SQL Managed Instance a databázi.migration

    1. Můžete se také přihlásit pomocí testGroupUser@aadsqlmi.net přihlašovacích údajů s možností Active Directory SSMS – Universal s podporou MFA. V tomto případě ale nemůžete použít mechanismus Jednotné přihlašování a musíte zadat heslo. K přihlášení ke spravované instanci SQL nebudete muset použít federovaný virtuální počítač.
  3. V rámci db_owner role můžete vytvořit novou tabulku.

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

Poznámka:

Kvůli známému problému s návrhem služby Azure SQL Database se vytvoření příkazu tabulky spuštěného jako člen skupiny nezdaří s následující chybou:


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.
Aktuálním alternativním řešením je vytvořit tabulku s existujícím schématem v případě výše dbo.new.<>

Další kroky

Kurz: Offline migrace SQL Serveru do azure SQL Managed Instance pomocí DMS