IS_SRVROLEMEMBER (T-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Menunjukkan apakah login SQL Server adalah anggota peran server yang ditentukan.
Sintaks
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
Argumen
' peran '
Adalah nama peran server yang sedang diperiksa. perannya adalah sysname.
Nilai yang valid untuk peran adalah peran server yang ditentukan pengguna, dan peran server tetap berikut:
- sysadmin
- serveradmin
- dbcreator
- setupadmin
- bulkadmin
- securityadmin
- diskadmin
- publik
- processadmin
' login '
Adalah nama login SQL Server untuk diperiksa. login adalah sysname, dengan default NULL. Jika tidak ada nilai yang ditentukan, hasilnya didasarkan pada konteks Eksekusi saat ini. Jika parameter berisi kata NULL, parameter akan mengembalikan NULL.
Catatan
Saat masuk Microsoft Entra berada dalam pratinjau publik untuk Azure SQL Database dan Azure Synapse, menggunakan perwakilan Microsoft Entra untuk masuk tidak didukung.
Jenis Kembalian
int
Nilai hasil | Deskripsi |
---|---|
0 | login bukan anggota peran. Di Azure SQL Database, pernyataan ini selalu mengembalikan 0. |
1 | login adalah anggota peran. |
NULL | peran atau login tidak valid, atau Anda tidak memiliki izin untuk melihat keanggotaan peran. |
Keterangan
Gunakan IS_SRVROLEMEMBER untuk menentukan apakah pengguna saat ini dapat melakukan tindakan yang memerlukan izin peran server.
Jika login Windows, seperti Contoso\Mary5, ditentukan untuk masuk, IS_SRVROLEMEMBER mengembalikan NULL, kecuali jika login telah diberikan atau ditolak akses langsung ke SQL Server.
Jika parameter masuk opsional tidak disediakan dan jika masuk adalah login domain Windows, parameter tersebut mungkin merupakan anggota peran server tetap melalui keanggotaan dalam grup Windows. Untuk mengatasi keanggotaan tidak langsung tersebut, IS_SRVROLEMEMBER meminta informasi keanggotaan grup Windows dari pengendali domain. Jika pengendali domain tidak dapat diakses atau tidak merespons, IS_SRVROLEMEMBER mengembalikan informasi keanggotaan peran dengan memperhitungkan pengguna dan grup lokalnya saja. Jika pengguna yang ditentukan bukan pengguna saat ini, nilai yang dikembalikan oleh IS_SRVROLEMEMBER mungkin berbeda dari pembaruan data terakhir pengautentikasi (seperti Direktori Aktif) ke SQL Server.
Jika parameter masuk opsional disediakan, login Windows yang sedang dikueri harus ada di sys.server_principals, atau IS_SRVROLEMEMBER mengembalikan NULL. Ini menunjukkan bahwa login tidak valid.
Ketika parameter login adalah login domain atau berdasarkan grup Windows dan pengendali domain tidak dapat diakses, panggilan ke IS_SRVROLEMEMBER akan gagal dan mungkin mengembalikan data yang salah atau tidak lengkap.
Jika pengendali domain tidak tersedia, panggilan ke IS_SRVROLEMEMBER mengembalikan informasi yang akurat ketika prinsipal Windows dapat diautentikasi secara lokal, seperti akun Windows lokal atau login SQL Server.
IS_SRVROLEMEMBER selalu mengembalikan 0 ketika grup Windows digunakan sebagai argumen masuk, dan grup Windows ini adalah anggota grup Windows lain yang, pada gilirannya, anggota peran server yang ditentukan.
Pengaturan Kontrol Akun Pengguna (UAC) juga dapat menyebabkan hasil yang berbeda kembali. Ini akan bergantung pada apakah pengguna mengakses server sebagai anggota grup Windows atau sebagai pengguna SQL Server tertentu.
Fungsi ini mengevaluasi keanggotaan peran, bukan izin yang mendasar. Misalnya, peran server tetap sysadmin memiliki izin CONTROL SERVER . Jika pengguna memiliki izin SERVER KONTROL tetapi bukan anggota peran, fungsi ini akan melaporkan dengan benar bahwa pengguna bukan anggota peran sysadmin , meskipun pengguna memiliki izin yang sama.
Fungsi Terkait
Untuk menentukan apakah pengguna saat ini adalah anggota grup Windows, grup Microsoft Entra, atau peran database SQL Server yang ditentukan, gunakan IS_MEMBER (Transact-SQL). Untuk menentukan apakah login SQL Server adalah anggota peran database, gunakan IS_ROLEMEMBER (Transact-SQL).
Izin
Memerlukan izin LIHAT DEFINISI pada peran server.
Contoh
Contoh berikut menunjukkan apakah login SQL Server untuk pengguna saat ini adalah anggota sysadmin
peran server tetap.
IF IS_SRVROLEMEMBER ('sysadmin') = 1
print 'Current user''s login is a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0
print 'Current user''s login is NOT a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL
print 'ERROR: The server role specified is not valid.';
Contoh berikut menunjukkan apakah Pat login domain adalah anggota peran server tetap diskadmin .
SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');