Bagikan melalui


Pengguna Microsoft Entra dan login dengan nama tampilan tidak unik

Berlaku untuk: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric

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, fabric SQL database, Azure SQL Managed Instance, dan SQL Server 2025 dan versi yang lebih baru.

Nota

Anda dapat membuat pengguna di database Fabric SQL, tetapi tidak dapat membuat login.

Gambaran Umum

MICROSOFT Entra ID mendukung autentikasi untuk perwakilan layanan. Namun, menggunakan prinsip layanan dengan nama tampilan yang tidak unik di Microsoft Entra ID dapat menyebabkan kesalahan saat membuat login atau pengguna di SQL Server, Azure SQL Database, dan Azure SQL Managed Instance.

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

Kesalahan nama tampilan duplikat terjadi karena MICROSOFT Entra ID memungkinkan nama tampilan duplikat untuk aplikasi Microsoft Entra (perwakilan layanan), sementara SQL Server dan 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.

Nota

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

Jika nama tampilan entitas layanan bukan duplikat, pernyataan "default CREATE LOGIN" atau "default CREATE USER" harus digunakan. WITH OBJECT_ID Ekstensi ini adalah 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 ini didukung untuk SQL Server 2025 dan versi yang lebih baru.

T-SQL membuat sintaks untuk login/pengguna dengan nama tampilan yang tidak unik

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, sampel T-SQL berikut membuat login myapp4466e menggunakan ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbbObjek aplikasi .

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Untuk menjalankan kueri T-SQL ini, ID Objek yang ditentukan harus ada di penyewa Microsoft Entra tempat sumber daya 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 principal layanan asli yang diperluas oleh akhiran yang ditentukan pengguna saat menggunakan pernyataan CREATE LOGIN atau CREATE USER. Sebagai praktik terbaik, akhiran dapat menyertakan bagian awal dari ID Objek tersebut. Misalnya, myapp2ba6c untuk Objek ID bbbbbbbb-1111-2222-3333-cccccccccccc. 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.

Nota

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

Nama tampilan perwakilan layanan di ID Microsoft Entra 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 tidak unik, penting untuk memastikan bahwa alias Microsoft Entra terhubung dengan aplikasi yang tepat. Untuk memeriksa apakah pengguna dibuat untuk prinsipal layanan (aplikasi) yang benar:

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

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

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

      Contoh output:

      Cuplikan layar output kueri SQL Server Management Studio (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 T-SQL berikutnya dan membandingkan beberapa digit terakhir dan membuat tanggal:

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

      Contoh output:

      Cuplikan layar output kueri SQL Server Management Studio (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 dari output kueri SQL Server Management Studio (SSMS) untuk ID Objek dari 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 kueri SQL Server Management Studio (SSMS) untuk SID grup.

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

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Buka portal Microsoft 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 sebelumnya.

Nota

Saat membuat pengguna dari perwakilan layanan, ID Objek diperlukan saat menggunakan WITH OBJECT_ID klausa dengan CREATE perintah T-SQL. Ini berbeda dari ID Aplikasi yang dikembalikan saat Anda mencoba memverifikasi alias di SQL Server. 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 Microsoft 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 .