Aracılığıyla paylaş


İ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 başka bir kullanıcıya izin vermek için gerekli 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 66 döndürülen değer (hex değeri 0x42), kullanıcının CREATE TABLE (ondalık değer 2) ve YEDEK VERITABANI (ondalık değer 64) ilemelerini çalıştırma iznine sahip olduğunu gösterir.

Üst 16 bit, kullanıcının diğer kullanıcılara VEREBILECEĞI YETINLERİ 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 kimliği belirtildiğinde INSERT iznini gösteren bittir. Oysa 0x80000 (ondalık değer 524288) INSERT izni verme 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 İŞLEM OLUŞTUR
8 0x8 GÖRÜNÜM YARAT
16 0x10 KURAL OLUŞTUR
32 0x20 VARSAYıLAN OLUŞTUR
64 0x40 YEDEKLEME VERITABANı
128 0x80 YEDEKLEME GÜNLÜĞÜ
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 HEPSİNİ GÜNCELLE
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 HERHANGI BIR GÜNCELLEME VAR
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 Güncelleme
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 Address üzerindeki AdventureWorks2025 INSERT iznini başka bir kullanıcıya verip veremeyeceğini 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.

REDDET (Transact-SQL)
HİBE (Transact-SQL)
OBJECT_ID (Transact-SQL)
İPTAL ETMEK (Transact-SQL)
sp_helprotect (Transact-SQL)
Sistem İşlevleri (Transact-SQL)