Bagikan melalui


Masuk dan pengguna Microsoft Entra dengan nama tampilan nonunique (pratinjau)

Berlaku untuk: Azure SQL Database Azure SQL Managed Instance

Artikel ini mengajarkan anda cara menggunakan sintaks T-SQL Object_ID untuk membuat login Microsoft Entra dan pengguna dengan nama tampilan nonunique di Azure SQL Database dan Azure SQL Managed Instance.

Catatan

Menggunakan WITH OBJECT_ID untuk membuat pengguna dan login di Azure SQL saat ini dalam pratinjau.

Gambaran Umum

MICROSOFT Entra ID mendukung autentikasi untuk perwakilan layanan. Namun, menggunakan perwakilan layanan dengan nama tampilan yang tidak unik di MICROSOFT Entra ID menyebabkan kesalahan saat membuat login atau pengguna di Azure SQL.

Misalnya, jika aplikasi myapp tidak unik, Anda mungkin mengalami kesalahan berikut:

Msg 33131, Level 16, State 1, Line 4 
Principal 'myapp' has a duplicate display name. Make the display name unique in Azure Active Directory and execute this statement again. 

Saat mencoba menjalankan pernyataan T-SQL berikut:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

WITH OBJECT_IDEkstensi

Kesalahan nama tampilan duplikat terjadi karena MICROSOFT Entra ID memungkinkan nama tampilan duplikat untuk aplikasi Microsoft Entra (perwakilan layanan), sementara Azure SQL memerlukan nama unik untuk membuat login dan pengguna Microsoft Entra. Untuk mengurangi masalah ini, pernyataan Bahasa Definisi Data (DDL) untuk membuat login dan pengguna telah diperluas untuk menyertakan ID Objek sumber daya Azure dengan WITH OBJECT_ID klausa.

Catatan

WITH OBJECT_ID Ekstensi saat ini dalam pratinjau publik.

Sebagian besar nama tampilan nonunique di MICROSOFT Entra ID terkait dengan perwakilan layanan, meskipun kadang-kadang nama grup juga dapat tidak menyatu. Nama prinsipal pengguna Microsoft Entra unik, karena dua pengguna tidak dapat memiliki prinsipal pengguna yang sama. Namun, pendaftaran aplikasi (perwakilan layanan) dapat dibuat dengan nama tampilan yang sama dengan nama prinsipal pengguna.

Jika nama tampilan perwakilan layanan bukan duplikat, default CREATE LOGIN atau CREATE USER pernyataan harus digunakan. WITH OBJECT_ID Ekstensi berada dalam pratinjau publik, dan merupakan item perbaikan pemecahan masalah yang diterapkan untuk digunakan dengan perwakilan layanan nonunique. Menggunakannya dengan perwakilan layanan unik tidak disarankan. WITH OBJECT_ID Menggunakan ekstensi untuk perwakilan layanan tanpa menambahkan akhiran akan berjalan dengan sukses, tetapi tidak akan jelas perwakilan layanan mana yang dibuat oleh login atau pengguna. Disarankan untuk membuat alias menggunakan akhiran untuk mengidentifikasi perwakilan layanan secara unik. WITH OBJECT_ID Ekstensi tidak didukung untuk SQL Server.

T-SQL membuat sintaks masuk/pengguna untuk nama tampilan nonunique

CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'

Dengan ekstensi dukungan T-SQL DDL untuk membuat login atau pengguna dengan ID Objek, Anda dapat menghindari kesalahan 33131 dan juga menentukan alias untuk login atau pengguna yang dibuat dengan ID Objek. Misalnya, berikut ini akan membuat login myapp4466e menggunakan ID 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxxObjek aplikasi .

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Untuk menjalankan kueri di atas, ID Objek yang ditentukan harus ada di penyewa Microsoft Entra tempat sumber daya Azure SQL berada. Jika tidak, CREATE perintah akan gagal dengan pesan kesalahan: Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • Login atau nama pengguna harus berisi nama perwakilan layanan asli yang diperluas oleh akhiran yang ditentukan pengguna saat menggunakan CREATE LOGIN pernyataan atau CREATE USER . Sebagai praktik terbaik, akhiran dapat menyertakan bagian awal dari ID Objeknya. Misalnya, myapp2ba6c untuk ID 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxxObjek . Namun, Anda juga dapat menentukan akhiran kustom. Membentuk akhiran dari ID Objek tidak diperlukan.

Konvensi penamaan ini disarankan untuk secara eksplisit mengaitkan pengguna database atau masuk kembali ke objeknya di ID Microsoft Entra.

Catatan

Alias mematuhi spesifikasi T-SQL untuk sysname, termasuk panjang maksimum 128 karakter. Sebaiknya batasi akhiran ke 5 karakter pertama ID Objek.

Nama tampilan perwakilan layanan di MICROSOFT Entra ID tidak disinkronkan ke login database atau alias pengguna. Menjalankan CREATE LOGIN atau CREATE USER tidak akan memengaruhi nama tampilan di Portal Microsoft Azure. Demikian pula, memodifikasi nama tampilan ID Microsoft Entra tidak akan memengaruhi login database atau alias pengguna.

Mengidentifikasi pengguna yang dibuat untuk aplikasi

Untuk perwakilan layanan nonunique, penting untuk memverifikasi alias Microsoft Entra terkait dengan aplikasi yang benar. Untuk memeriksa apakah pengguna dibuat untuk perwakilan layanan (aplikasi) yang benar:

  1. Dapatkan ID Aplikasi aplikasi, atau ID Objek grup Microsoft Entra dari pengguna yang dibuat di SQL Database. Lihat kueri berikut:

    • Untuk mendapatkan ID Aplikasi perwakilan layanan dari pengguna yang dibuat, jalankan kueri berikut:

      SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Contoh output:

      Cuplikan layar output SSMS untuk ID Aplikasi.

      ID Aplikasi dikonversi dari nomor identifikasi keamanan (SID) untuk login atau nama pengguna yang ditentukan, yang dapat kami konfirmasi dengan menjalankan kueri di bawah ini dan membandingkan beberapa digit terakhir dan membuat tanggal:

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Contoh output:

      Cuplikan layar output SSMS untuk SID aplikasi.

    • Untuk mendapatkan ID Objek grup Microsoft Entra dari pengguna yang dibuat, jalankan kueri berikut:

      SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Contoh output:

      Cuplikan layar output SSMS untuk ID Objek grup Microsoft Entra.

      Untuk memeriksa SID grup Microsoft Entra dari pengguna yang dibuat, jalankan kueri berikut:

      SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Contoh output:

      Cuplikan layar output SSMS untuk SID grup.

    • Untuk mendapatkan ID Objek dan ID Aplikasi aplikasi menggunakan PowerShell jalankan perintah berikut:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Buka portal Azure, dan di aplikasi Enterprise atau sumber daya grup Microsoft Entra Anda, periksa ID Aplikasi atau ID Objek masing-masing. Lihat apakah cocok dengan yang diperoleh dari kueri di atas.

Catatan

Saat membuat pengguna dari perwakilan layanan, ID Objek diperlukan saat menggunakan WITH OBJECT_ID klausa dengan CREATE pernyataan T-SQL. Ini berbeda dari ID Aplikasi yang dikembalikan saat Anda mencoba memverifikasi alias di Azure SQL. Dengan menggunakan proses verifikasi ini, Anda dapat mengidentifikasi perwakilan layanan atau grup yang terkait dengan alias SQL di ID Microsoft Entra, dan mencegah kemungkinan kesalahan saat membuat login atau pengguna dengan ID Objek.

Menemukan ID Objek yang tepat

Untuk informasi tentang ID Objek perwakilan layanan, lihat Objek perwakilan layanan. Anda dapat menemukan ID Objek dari perwakilan layanan yang tercantum di samping nama aplikasi di portal Azure di bawah aplikasi Perusahaan.

Peringatan

ID Objek yang diperoleh di halaman Gambaran Umum pendaftaran aplikasi berbeda dari ID Objek yang diperoleh di halaman Gambaran Umum aplikasi Perusahaan. Jika Anda berada di halaman Gambaran Umum Pendaftaran aplikasi, pilih aplikasi Terkelola yang ditautkan di nama aplikasi direktori lokal untuk menavigasi ke ID Objek yang tepat di halaman Gambaran Umum aplikasi Perusahaan.