Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Mevcut kullanıcının bir güvenlikli üzerindeki etkin iznini değerlendirir. İlgili bir fonksiyon fn_my_permissions.
Transact-SQL söz dizimi kuralları
Sözdizimi
HAS_PERMS_BY_NAME ( securable , securable_class , permission
[ , sub-securable ] [ , sub-securable_class ] )
Arguments
Güvenilir
Güvenlikli kişinin adı. Eğer güvence verilebilir sunucu ise, bu değer NULL olarak ayarlanmalıdır.
Securable , sysname tipinin skaler bir ifadesidir. Varsayılan bir durum yoktur.
securable_class
İznin test edildiği temenkul sınıfının adıdır.
securable_class , nvarchar(60) tipinin skaler bir ifadesidir.
Azure SQL Veritabanı'nda securable_class argümanı aşağıdaki argümanlardan birine ayarlanmalıdır: DATABASE, OBJECT, ROLE,SCHEMA veya USER.
izin
Kontrol edilecek izin adını temsil eden sysname tipine sahip null olmayan bir skaler ifade. Varsayılan bir durum yoktur. ANY izin adı joker karttır.
alt teminatlı
İznin, izninin test edildiği güvenlikli alt varlığın adını temsil eden isteğe bağlı bir sysname tipli skaler ifade. Varsayılan NULL'dur.
Uyarı
Alt güvenlikçiler, '[altadı]' şeklinde parantez kullanamaz. Bunun yerine 'sub name' kullanın.
alt securable_class
İzninin test edildiği güvenliklendirilebilir alt varlık sınıfını temsil eden isteğe bağlı bir nvarchar(60) tipli skaler ifade. Varsayılan NULL'dur.
Azure SQL Veritabanı'nda, alt securable_class argümanı yalnızca securable_class argümanı OBJECT olarak ayarlanmışsa geçerlidir. Eğer securable_class argüman OBJECT'e ayarlanmışsa, alt securable_class argümanı COLUMN olarak ayarlanmalıdır.
Dönüş Türleri
int
Sorgu başarısız olduğunda NULL döndürür.
Açıklamalar
Bu yerleşik fonksiyon, mevcut başaklının belirli bir temenkul teminat üzerinde belirli bir etkin izne sahip olup olmadığını test eder. HAS_PERMS_BY_NAME, kullanıcının güvenlikli üzerinde etkin iznine sahip olduğunda 1, güvenli bir sistemde etkili izni olmadığında 0 ve güvenlikli sınıf veya izin geçerli olmadığında NULL döner. Etkili bir izin aşağıdakilerden herhangi biridir:
Doğrudan müdüre verilen bir izin, reddedilmez.
Müdür tarafından tutulan ve reddedilmeyecek daha yüksek seviyeli bir izinle ima edilen bir izin.
Başkanın üyesi olduğu bir rol veya gruba verilen ve reddedilmemiş bir izin.
Müdürün üyesi olduğu bir rol veya grup tarafından alınan ve reddedilmemiş bir izin.
İzin değerlendirmesi her zaman arayanın güvenlik bağlamında yapılır. Başka bir kullanıcının etkili bir iznine sahip olup olmadığını belirlemek için, arayan kişinin o kullanıcıda IMPERSONATE iznine sahip olması gerekir.
Şema düzeyindeki varlıklar için bir, iki veya üç bölümlü boş olmayan isimler kabul edilir. Veritabanı düzeyindeki varlıklar için tek parçalı bir isim kabul edilir ve "güncel veritabanı" anlamına gelen null değer bulunur. Sunucunun kendisi için bir null değer (yani "mevcut sunucu") gereklidir. Bu fonksiyon, bağlı bir sunucuda veya sunucu düzeyinde bir prensip oluşturulmamış bir Windows kullanıcısında izinleri kontrol edemez.
Aşağıdaki sorgu, yerleşik güvenli sınıfların bir listesini döndürecektir:
SELECT class_desc FROM sys.fn_builtin_permissions(default);
Aşağıdaki derlemeler kullanılır:
Güncel veritabanı derleme: Şema tarafından içerilmeyen güvenlikleri içeren veritabanı düzeyinde güvenlikli varlıklar; bir veya iki parçalı şema kapsamlı güvenlikler; Üç bölümlü bir isim kullanıldığında hedef veritabanı.
ana veritabanı derleme: Sunucu düzeyinde güvenlikli varlıklar.
'ANY' sütun düzeyinde kontroller için desteklenmez. Uygun izni belirtmeniz gerekir.
Örnekler
A. Sunucu düzeyinde VIEW SERVER STATE iznine sahip miyim?
Geçerlidir: SQL Server 2008 (10.0.x) ve sonrası sürümler
SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');
B. Sunucu müdürü P'yi taklit edebilir miyim?
Geçerlidir: SQL Server 2008 (10.0.x) ve sonrası sürümler
SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');
C. Mevcut veritabanında herhangi bir iznim var mı?
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
D. Veritabanı yöneticisi Pd'nin mevcut veritabanında herhangi bir izni var mı?
Arayan kişinin PRAKTİP PdOLARAK KIMSENİZLEME iznine sahip olduğunu varsayın.
EXECUTE AS user = 'Pd'
GO
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
GO
REVERT;
GO
E. Şema S'de prosedürler ve tablolar oluşturabilir miyim?
Aşağıdaki örnek, veritabanında ALTER ve S izin, tablolar için de benzer şekilde izin gerektirirCREATE PROCEDURE.
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE PROCEDURE')
& HAS_PERMS_BY_NAME('S', 'SCHEMA', 'ALTER') AS _can_create_procs,
HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE') &
HAS_PERMS_BY_NAME('S', 'SCHEMA', 'ALTER') AS _can_create_tables;
F. Hangi tablolarda SELECT iznim var?
SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name),
'OBJECT', 'SELECT') AS have_select, * FROM sys.tables
G. AdventureWorks2022'de SalesPerson tablosunda INSERT iznim var mı?
Aşağıdaki örnek, AdventureWorks2025 mevcut veritabanım bağlamı olduğunu varsayıyor ve iki bölümden oluşan bir isim kullanıyor.
SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');
Aşağıdaki örnek, mevcut veritabanı bağlamım hakkında hiçbir varsayımda bulunmuyor ve üç bölümden oluşan bir isim kullanıyor.
SELECT HAS_PERMS_BY_NAME('AdventureWorks2022.Sales.SalesPerson',
'OBJECT', 'INSERT');
H. Hangi tablo T sütunlarında SELECT iznim var?
SELECT name AS column_name,
HAS_PERMS_BY_NAME('T', 'OBJECT', 'SELECT', name, 'COLUMN')
AS can_select
FROM sys.columns AS c
WHERE c.object_id=object_id('T');
Ayrıca Bkz.
İzinler (Veritabanı Altyapısı)
Securables
İzin Hiyerarşisi (Veritabanı Altyapısı)
sys.fn_builtin_permissions (Transact-SQL)
Güvenlik Kataloğu Görünümleri (Transact-SQL)