İZİNLER (Transact-sql)
Deyimi, nesne veya sütun izinler geçerli kullanıcının gösteren bir bit eşlem içeren bir değeri döndürür.
Önemli Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.Kullanım fn_my_permissions ve Has_Perms_By_Name onun yerine. PERMISSIONS işlevini kullanmaya devam etmeniz daha yavaş performans sonuçlanabilir.
Transact-SQL Sözdizim Kuralları
Sözdizimi
PERMISSIONS ( [ objectid [ , 'column' ] ] )
Bağımsız değişkenler
objectid
Bir güvenlik altına alınabilir kimliğidir. Eğer objectid, deyimi izinler geçerli kullanıcının; bit eşlem değeri içeren belirtilmemiş Aksi takdirde, bitmap güvenilir geçerli kullanıcı için izinleri içerir. Güvenilir belirtilen geçerli veritabanı içinde olmalıdır. Kullanım OBJECT_ID belirlemek için işlev objectiddeğer.'column'
İsteğe bağlı bir sütun için hangi izin bilgileri döndürülür adıdır. Geçerli sütun adı tarafından belirtilen tablodaki sütun olmalıdır objectid.
Dönüş Türleri
int
Açıklamalar
İZİNLER geçerli kullanıcının bir deyimini yürütmek için veya başka bir kullanıcıya izin vermek için gerekli izinlere sahip olup olmadığını belirlemek için kullanılır.
Döndürülen izinleri bir 32-bit bit eşlem bilgilerdir.
Kullanıcıya verilen izinlere ve ayrıca Windows grubuna uygulanan izinlerin alt 16 biti yansıtmak veya ve sabit sunucu rolleri geçerli kullanıcının üyesi olduğu. 66 (Onaltılık değer 0x42), örneğin, döndürülen değeri Hayır objectidbelirtilirse, kullanıcı create table (ondalık değeri 2) ve yedekleme veritabanı (ondalık değeri 64) deyimleri yürütme iznine sahip olduğunu gösterir.
Üst 16 bit kullanıcı diğer kullanıcılara verebilir izinler yansıtır. Üst 16 bit, tam olarak bu alt 16 biti dışında onlar tarafından 16 bits (65536 tarafından çarpılan) sola kaydırılır aşağıdaki tabloda açıklandığı gibi yorumlanır. Örneğin, 0x8 (ondalık değeri 8) INSERT izni gösteren parçasıdır ne zaman bir objectidbelirtilen. 0X80000 (ondalık değer 524288) hibe ekleme izni, yeteneği gösterir çünkü Oysa 524288 = 8 x 65536.
Rol üyeliği nedeniyle, bir deyimi yürütme izni olmayan bir kullanıcı hala başka bir kullanıcıya bu izni vermek mümkün olabilir.
Aşağıdaki tablo deyimi izinleri için kullanılan bit sayısını gösterir ( objectid belirtilmemiş).
Bit (dec) |
Bit (onaltılık) |
Deyimi izni |
---|---|---|
1 |
0x1 |
create database ( master yalnızca veritabanı) |
2 |
0x2 |
TABLO OLUŞTURMA |
4 |
0x4 |
YORDAM OLUŞTURMA |
8 |
0x8 |
GÖRÜNÜM OLUŞTURMA |
16 |
gerçekleşen |
KURAL OLUŞTURMA |
32 |
0x20 |
VARSAYILAN OLUŞTURMA |
64 |
0x40 |
YEDEKLEME VERİTABANI |
128 |
0x80 |
YEDEKLEME GÜNLÜĞÜ |
256 |
0x100 |
Aittir |
Aşağıdaki tablo, yalnızca olduğunda döndürülen nesne izinleri için kullanılan bit gösterir objectidbelirtilen.
Bit (dec) |
Bit (onaltılık) |
Deyimi izni |
---|---|---|
1 |
0x1 |
TÜMÜNÜ SEÇ |
2 |
0x2 |
TÜM GÜNCELLEŞTİRME |
4 |
0x4 |
TÜM BAŞVURULARI |
8 |
0x8 |
EKLE |
16 |
gerçekleşen |
DELETE |
32 |
0x20 |
execute (yalnızca yordamları) |
4096 |
0x1000 |
Herhangi bir (en az bir sütun) seçin |
8192 |
0x2000 |
TÜM GÜNCELLEŞTİRME |
16384 |
0x4000 |
TÜM BAŞVURULARI |
Aşağıdaki tabloda ne zaman döndürülen sütun düzeyi nesne izinleri için kullanılan bit gösterir hem de objectidve sütun belirtilen.
Bit (dec) |
Bit (onaltılık) |
Deyimi izni |
---|---|---|
1 |
0x1 |
SEÇİN |
2 |
0x2 |
GÜNCELLEŞTİRME |
4 |
0x4 |
REFERANSLAR |
Belirtilen parametre null veya geçersiz olduğunda null döndürülür (örneğin, bir objectidya da varolmayan sütunu). (Örneğin 0x20, tablo biraz execute izni) uygulamayın izinlerin bit değerleri tanımsızdır.
Bitsel ve (&) işlecini PERMISSIONS işlevi tarafından döndürülen bit eşlem ayarlanan her bit belirlemek için.
sp_helprotectSistem saklı yordam ayrıca geçerli veritabanında bir kullanıcı için izinler listesini döndürmek için kullanılabilir.
Örnekler
A.Deyimi izinleriyle PERMISSIONS işlevini kullanma
Aşağıdaki örnek geçerli kullanıcı yürütebilir olup olmadığını belirleyen CREATE TABLEdeyimi.
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.';
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.';
B.Nesne izinleriyle PERMISSIONS işlevini kullanma
Aşağıdaki örnek geçerli kullanıcı veri satırı giremeyeceğinizi belirler Addressiçinde masa AdventureWorks2012veritabanı.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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.';
IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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.C.Grantable izinleriyle PERMISSIONS işlevini kullanma
Aşağıdaki örnek geçerli kullanıcı üzerinde INSERT izni verebilirsiniz olup olmadığını belirleyen Addressiçinde masa AdventureWorks2012başka bir kullanıcı veritabanına.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';
IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';