İZNLER (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Mevcut kullanıcının ifadesi, nesnesi veya sütun izinlerini gösteren bir bitmap içeren bir değer döndürür.

Önemli

Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın. Bunun yerine fn_my_permissions ve Has_Perms_By_Name kullanın. PERMISSIONS fonksiyonunun sürekli kullanılması performansın yavaşlamasına yol açabilir.

Transact-SQL söz dizimi kuralları

Sözdizimi

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

Arguments

Nesne Kimliği
Bir temenkul alıcının kimliği nedir. Eğer objectid belirtilmemişse, bitmap değeri mevcut kullanıcı için ifade yetkilerini içerir; aksi takdirde, bitmap mevcut kullanıcı için güvenli bir sistem üzerinde izinler içerir. Belirtilen güvenlikli madde mevcut veritabanında olmalıdır. Nesne değeribelirlemek için OBJECT_ID fonksiyonunu kullanın.

'Sütun'
İzin bilgisinin iade edildiği bir sütunun isteğe bağlı adıdır. Sütun, objectid tarafından belirtilen tabloda geçerli bir sütun adı olmalıdır.

Dönüş Türleri

int

Açıklamalar

İZNLER, mevcut kullanıcının bir ifadeyi çalıştırmak veya GRANT başka bir kullanıcıya izin almak için gereken izinlere sahip olup olmadığını belirlemek için kullanılabilir.

Verilen izin bilgisi 32-bit bir bitkarttır.

Alt 16 bit, kullanıcıya verilen izinleri ve ayrıca Windows gruplarına veya mevcut kullanıcının üyesi olduğu sabit sunucu rollerine uygulanan izinleri yansıtır. Örneğin, herhangi bir nesne kimliği belirtilmediğinde döndürülen 66 değeri (altılık değer 0x42), kullanıcının (ondalık değer 2) ve BACKUPDATABASE (ondalık değer 64) ilemelerini çalıştırma CREATE TABLE iznine sahip olduğunu gösterir.

Üst 16 bit, kullanıcının diğer kullanıcılara verebileceği GRANT izinleri yansıtır. Üst 16 bit, aşağıdaki tablolarda tanımlanan alt 16 bitin bitleri gibi yorumlanır, ancak bunlar sola 16 bit kaydırılır (çarpı 65536). Örneğin, 0x8 (ondalık değer 8), bir nesne belirtildiğinde izin gösteren INSERT bittir. Oysa 0x80000 (ondalık değer 524288) izin alma GRANTINSERT yeteneğini gösterir, çünkü 524288 = 8 x 65536.

Rol üyeliği nedeniyle, bir ifade yürütme izni olmayan bir kullanıcı yine de bu izni başka bir kullanıcıya verebilir.

Aşağıdaki tablo, ifade izinleri için kullanılan bitleri gösterir (objectid belirtilmemiştir).

Bit (dec) Bit (altıgen) Bildirim izni
1 0x1 CREATE DATABASE (sadece ana veritabanı)
2 0x2 CREATE TABLE
4 0x4 CREATE PROCEDURE
8 0x8 CREATE VIEW
16 0x10 CREATE RULE
32 0x20 CREATE DEFAULT
64 0x40 BACKUP DATABASE
128 0x80 BACKUP GÜNLÜK
256 0x100 Rezerve edildi

Aşağıdaki tablo, yalnızca objectid belirtildiğinde döndürülen nesne izinleri için kullanılan bitleri gösterir.

Bit (dec) Bit (altıgen) Bildirim izni
1 0x1 HEPSİNİ SEÇ
2 0x2 UPDATE HEPSİ
4 0x4 TÜM KAYNAKLAR
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (sadece prosedürler)
4096 0x1000 HERHANGI BİRİ SEÇ (en az bir sütun)
8192 0x2000 UPDATE HERHANGI
16384 0x4000 HERHANGI BIR REFERANS VAR

Aşağıdaki tablo, hem objectid hem de column belirtildiğinde döndürülen sütun düzeyindeki nesne izinleri için kullanılan bitleri gösterir.

Bit (dec) Bit (altıgen) Bildirim izni
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES

Belirli bir parametre NULL veya geçerli değilse (örneğin, var olmayan bir nesne id veya sütun) NULL döner. Uygulanmayan izinler için bit değerleri (örneğin EXECUTE izni, bit 0x20, bir tablo için) tanımlanmamıştır.

PERMISSIONS fonksiyonunun döndürüp dönen bitmap'teki her bit kümesini belirlemek için bitbazda AND (&) operatörünü kullanın.

sp_helprotect sistem depolanmış prosedür, mevcut veritabanındaki bir kullanıcı için bir izinler listesini de döndürmek için kullanılabilir.

Örnekler

A. PERMISSIONS fonksiyonunu ifade izinleriyle kullanmak

Aşağıdaki örnek, mevcut kullanıcının ifadeyi CREATE TABLE çalıştırıp çalıştıramayacağını belirler.

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

B. PERMISSIONS fonksiyonunu nesne izinleriyle kullanmak

Aşağıdaki örnek, mevcut kullanıcının veritabanındaki tabloya Address bir satır veri AdventureWorks2025 ekleyip ekleyemeyeceğini belirler.

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. PERMISSIONS fonksiyonunun verilebilir izinlerle kullanıldığı

Aşağıdaki örnek, mevcut kullanıcının veritabanındaki tablo AdventureWorks2025 üzerindeki izni başka bir kullanıcıya verip veremeyeceğini INSERTAddress belirler.

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.';  

Ayrıca Bkz.

DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Sistem İşlevleri (Transact-SQL)