Samouczek: migrowanie użytkowników i grup systemu Windows w wystąpieniu programu SQL Server do usługi Azure SQL Managed Instance przy użyciu składni języka T-SQL DDL

Dotyczy:Azure SQL Managed Instance

W tym artykule przedstawiono proces migracji lokalnych użytkowników i grup systemu Windows w programie SQL Server do usługi Azure SQL Managed Instance przy użyciu składni języka T-SQL.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie identyfikatorów logowania dla programu SQL Server
  • Tworzenie testowej bazy danych na potrzeby migracji
  • Tworzenie nazw logowania, użytkowników i ról
  • Tworzenie kopii zapasowej i przywracanie bazy danych do wystąpienia zarządzanego SQL (MI)
  • Ręczne migrowanie użytkowników do wystąpienia zarządzanego przy użyciu składni ALTER USER
  • Testowanie uwierzytelniania przy użyciu nowych zamapowanych użytkowników

Uwaga

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

Wymagania wstępne

Aby ukończyć ten samouczek, obowiązują następujące wymagania wstępne:

Składnia języka DDL języka T-SQL

Poniżej przedstawiono składnię języka T-SQL DDL używaną do obsługi migracji użytkowników i grup systemu Windows z wystąpienia programu SQL Server do usługi SQL Managed Instance z uwierzytelnianiem firmy 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
Określa nazwę domeny użytkownika.

userName
Określa nazwę użytkownika zidentyfikowanego w bazie danych.

= loginName@domainName.com
Mapuje użytkownika na identyfikator logowania w usłudze Microsoft Entra

groupName
Określa nazwę grupy zidentyfikowanej wewnątrz bazy danych.

Część 1. Tworzenie identyfikatorów logowania w programie SQL Server dla użytkowników i grup systemu Windows

Ważne

Poniższa składnia tworzy użytkownika i identyfikator logowania grupy w programie SQL Server. Przed wykonaniem poniższej składni upewnij się, że użytkownik i grupa istnieją w usłudze Active Directory (AD).

Użytkownicy: testUser1, testGroupUser
Group: migration — testGroupUser musi należeć do grupy migracji w usłudze AD

Poniższy przykład tworzy identyfikator logowania w programie SQL Server dla konta o nazwie testUser1 w domenie 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;

Utwórz bazę danych dla tego testu.

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

Część 2. Tworzenie użytkowników i grup systemu Windows, a następnie dodawanie ról i uprawnień

Użyj następującej składni, aby utworzyć użytkownika testowego.

use migration;  
go

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

Sprawdź uprawnienia użytkownika:

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

Utwórz rolę i przypisz użytkownika testowego do tej 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

Użyj następującego zapytania, aby wyświetlić nazwy użytkowników przypisane do określonej 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;

Użyj następującej składni, aby utworzyć grupę. Następnie dodaj grupę do roli 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)

Utwórz tabelę testową i dodaj dane przy użyciu następującej składni:

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

Część 3. Tworzenie kopii zapasowej i przywracanie pojedynczej bazy danych użytkownika do wystąpienia zarządzanego SQL

Utwórz kopię zapasową bazy danych migracji przy użyciu artykułu Kopiowanie baz danych z kopią zapasową i przywracaniem lub użyj następującej składni:

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

Postępuj zgodnie z naszym przewodnikiem Szybki start: przywracanie bazy danych do wystąpienia zarządzanego SQL.

Część 4. Migrowanie użytkowników do usługi SQL Managed Instance

Wykonaj polecenie ALTER USER, aby ukończyć proces migracji w usłudze SQL Managed Instance.

  1. Zaloguj się do wystąpienia zarządzanego SQL przy użyciu konta administratora usługi Microsoft Entra dla usługi SQL Managed Instance. Następnie utwórz identyfikator logowania usługi Microsoft Entra w usłudze SQL Managed Instance przy użyciu następującej składni. Aby uzyskać więcej informacji, zobacz Samouczek: zabezpieczenia usługi SQL Managed Instance w usłudze Azure SQL Database przy użyciu jednostek usługi Microsoft Entra server (identyfikatorów logowania).

    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. Sprawdź migrację pod kątem prawidłowej bazy danych, tabeli i podmiotów zabezpieczeń.

    -- 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. Użyj składni ALTER USER, aby zamapować użytkownika lokalnego na identyfikator logowania firmy 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. Użyj składni ALTER USER, aby zamapować grupę lokalną na identyfikator logowania firmy 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'
    

Część 5. Testowanie uwierzytelniania użytkowników lub grup firmy Microsoft

Przetestuj uwierzytelnianie w usłudze SQL Managed Instance przy użyciu użytkownika wcześniej zamapowanego na logowanie firmy Microsoft Entra przy użyciu składni ALTER USER.

  1. Zaloguj się do maszyny wirtualnej federacyjnej przy użyciu subskrypcji usługi Azure SQL Managed Instance jako aadsqlmi\testUser1

  2. Za pomocą programu SQL Server Management Studio (SSMS) zaloguj się do wystąpienia zarządzanego SQL przy użyciu zintegrowanego uwierzytelniania usługi Active Directory, łącząc się z bazą danych migration.

    1. Możesz również zalogować się przy użyciu testUser1@aadsqlmi.net poświadczeń z opcją SSMS Active Directory — uniwersalna z obsługą uwierzytelniania wieloskładnikowego. Jednak w tym przypadku nie można użyć mechanizmu Logowanie jednokrotne i musisz wpisać hasło. Nie trzeba używać maszyny wirtualnej federacyjnej do logowania się do wystąpienia zarządzanego SQL.
  3. W ramach elementu członkowskiego roli SELECT możesz wybrać z test tabeli

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

Przetestuj uwierzytelnianie w usłudze SQL Managed Instance przy użyciu elementu członkowskiego grupy migrationsystemu Windows. Użytkownik aadsqlmi\testGroupUser powinien zostać dodany do grupy migration przed migracją.

  1. Zaloguj się do maszyny wirtualnej federacyjnej przy użyciu subskrypcji usługi Azure SQL Managed Instance jako aadsqlmi\testGroupUser

  2. Używanie programu SSMS ze zintegrowanym uwierzytelnianiem usługi Active Directory, nawiązywanie połączenia z serwerem usługi Azure SQL Managed Instance i bazą danych migration

    1. Możesz również zalogować się przy użyciu testGroupUser@aadsqlmi.net poświadczeń z opcją SSMS Active Directory — uniwersalna z obsługą uwierzytelniania wieloskładnikowego. Jednak w tym przypadku nie można użyć mechanizmu Logowanie jednokrotne i musisz wpisać hasło. Nie trzeba używać maszyny wirtualnej federacyjnej do logowania się do usługi SQL Managed Instance.
  3. W ramach db_owner roli możesz utworzyć nową tabelę.

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

Uwaga

Ze względu na znany problem z projektowaniem usługi Azure SQL Database instrukcja tworzenia tabeli wykonywana jako członek grupy zakończy się niepowodzeniem z powodu następującego błędu:


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.
Bieżącym obejściem jest utworzenie tabeli z istniejącym schematem w przypadku powyżej <dbo.new>

Następne kroki

Samouczek: migrowanie programu SQL Server do usługi Azure SQL Managed Instance w trybie offline przy użyciu usługi DMS