Bagikan melalui


IZIN (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Mengembalikan nilai yang berisi bitmap yang menunjukkan izin pernyataan, objek, atau kolom pengguna saat ini.

Penting

Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Gunakan fn_my_permissions dan Has_Perms_By_Name sebagai gantinya. Penggunaan fungsi IZIN yang berkelanjutan dapat mengakibatkan performa yang lebih lambat.

Konvensi sintaks transact-SQL

Sintaks

PERMISSIONS ( [ objectid [ , 'column' ] ] )  

Argumen

objectid
Adalah ID dari yang dapat diamankan. Jika objectid tidak ditentukan, nilai bitmap berisi izin pernyataan untuk pengguna saat ini; jika tidak, bitmap berisi izin pada yang dapat diamankan untuk pengguna saat ini. Yang dapat diamankan yang ditentukan harus berada dalam database saat ini. Gunakan fungsi OBJECT_ID untuk menentukan nilai objectid.

' kolom '
Adalah nama opsional kolom tempat informasi izin dikembalikan. Kolom harus berupa nama kolom yang valid dalam tabel yang ditentukan oleh objectid.

Jenis Kembalian

int

Keterangan

IZIN dapat digunakan untuk menentukan apakah pengguna saat ini memiliki izin yang diperlukan untuk menjalankan pernyataan atau memberikan izin kepada pengguna lain.

Informasi izin yang dikembalikan adalah bitmap 32-bit.

16 bit yang lebih rendah mencerminkan izin yang diberikan kepada pengguna, dan juga izin yang diterapkan ke grup Windows atau dan peran server tetap di mana pengguna saat ini adalah anggota. Misalnya, nilai yang dikembalikan 66 (nilai heks 0x42), ketika tidak ada objectid yang ditentukan, menunjukkan bahwa pengguna memiliki izin untuk menjalankan pernyataan CREATE TABLE (nilai desimal 2) dan BACKUP DATABASE (nilai desimal 64).

16 bit atas mencerminkan izin yang dapat diberikan pengguna kepada pengguna lain. 16 bit atas ditafsirkan persis seperti yang untuk 16 bit yang lebih rendah yang dijelaskan dalam tabel berikut, kecuali digeser ke kiri dengan 16 bit (dikalikan dengan 65536). Misalnya, 0x8 (nilai desimal 8) adalah bit yang menunjukkan izin INSERT saat objectid ditentukan. Sedangkan, 0x80000 (nilai desimal 524288) menunjukkan kemampuan untuk MEMBERIKAN izin INSERT, karena 524288 = 8 x 65536.

Karena keanggotaan dalam peran, pengguna yang tidak memiliki izin untuk menjalankan pernyataan mungkin masih dapat memberikan izin tersebut kepada pengguna lain.

Tabel berikut menunjukkan bit yang digunakan untuk izin pernyataan (objectid tidak ditentukan).

Bit (des) Bit (hex) Izin pernyataan
1 0x1 CREATE DATABASE (hanya database master)
2 0x2 CREATE TABLE
4 0x4 CREATE PROCEDURE
8 0x8 BUAT TAMPILAN
16 0x10 BUAT ATURAN
32 0x20 BUAT DEFAULT
64 0x40 DATABASE CADANGAN
128 0x80 LOG CADANGAN
256 0x100 Dicadangkan

Tabel berikut ini memperlihatkan bit yang digunakan untuk izin objek yang dikembalikan saat hanya objectid yang ditentukan.

Bit (des) Bit (hex) Izin pernyataan
1 0x1 PILIH SEMUA
2 0x2 PERBARUI SEMUA
4 0x4 REFERENSI SEMUA
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (hanya prosedur)
4096 0x1000 SELECT ANY (setidaknya satu kolom)
8192 0x2000 PERBARUI APA PUN
16384 0x4000 REFERENSI APA PUN

Tabel berikut ini memperlihatkan bit yang digunakan untuk izin objek tingkat kolom yang dikembalikan saat objectid dan kolom ditentukan.

Bit (des) Bit (hex) Izin pernyataan
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES

NULL dikembalikan ketika parameter yang ditentukan adalah NULL atau tidak valid (misalnya, objectid atau kolom yang tidak ada). Nilai bit untuk izin yang tidak berlaku (misalnya izin EXECUTE, bit 0x20, untuk tabel) tidak ditentukan.

Gunakan operator bitwise AND (&) untuk menentukan setiap bit yang diatur dalam bitmap yang dikembalikan oleh fungsi PERMISSIONS.

Prosedur tersimpan sistem sp_helprotect juga dapat digunakan untuk mengembalikan daftar izin untuk pengguna dalam database saat ini.

Contoh

J. Menggunakan fungsi IZIN dengan izin pernyataan

Contoh berikut menentukan apakah pengguna saat ini dapat menjalankan CREATE TABLE pernyataan.

IF PERMISSIONS()&2=2  
   CREATE TABLE test_table (col1 INT)  
ELSE  
   PRINT 'ERROR: The current user cannot create a table.';  

B. Menggunakan fungsi IZIN dengan izin objek

Contoh berikut menentukan apakah pengguna saat ini dapat menyisipkan baris data ke Address dalam tabel dalam AdventureWorks2022 database.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&8=8   
   PRINT 'The current user can insert data into Person.Address.'  
ELSE  
   PRINT 'ERROR: The current user cannot insert data into Person.Address.';  

C. Menggunakan fungsi IZIN dengan izin yang dapat diberikan

Contoh berikut menentukan apakah pengguna saat ini dapat memberikan izin INSERT pada Address tabel dalam AdventureWorks2022 database kepada pengguna lain.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&0x80000=0x80000  
   PRINT 'INSERT on Person.Address is grantable.'  
ELSE  
   PRINT 'You may not GRANT INSERT permissions on Person.Address.';  

Lihat Juga

TOLAK (Transact-SQL)
GRANT (T-SQL)
OBJECT_ID (T-SQL)
MENCABUT (Transact-SQL)
sp_helprotect (T-SQL)
Fungsi Sistem (Transact-SQL)