has_perms_by_name (Transact-SQL)
Geçerli kullanıcının bir güvenliği sağlanabiliretkili izne değerlendirir.İlgili işlev fn_my_permissions.
Sözdizimi
HAS_PERMS_BY_NAME ( securable , securable_class , permission
[ , sub-securable ] [ , sub-securable_class ] )
Bağımsız değişkenler
securable
güvenliği sağlanabiliradıdır.güvenliği sağlanabilir sunucunun kendisi ise, bu değer küme null olmalıdır.securablebirifade skalertürü sysname.Varsayılan yoktur.securable_class
Karşısında izin sınanır güvenliği sağlanabilir sınıfını adıdır.securable_classbirifade skalertürü nvarchar(60).permission
Tür geçirecektir skaler ifade sysname Denetlenecek izin adı temsil eder.Varsayılan yoktur.İzni herhangi bir joker karakter adıdır.sub-securable
İsteğe bağlı skaler ifade türü sysname izni test, karşı güvenliği sağlanabilir altvarlık adını temsil eder.Varsayılan değer null olur.Not
Sürümlerinde SQL Server ile SQL Server 2008 Service Pack 2'de, sub-güvenli hale Getirilebilenler formunda köşeli ayraç kullanamazsınız ' [sub adı'.Use 'sub adı' onun yerine.
sub-securable_class
İsteğe bağlı skaler ifade türü nvarchar(60) güvenliği sağlanabilir sınıfını temsil eder.Varsayılan değer null olur.
Dönüş Türleri
int
Sorgu başarısız olduğunda null döndürüyor.
Açıklamalar
Bu yerleşik işlev geçerli asıl bir belirli etkili bir belirtilen güvenliği sağlanabilirüzerinde izni olup olmadığını sınar.Kullanıcının etkin izni güvenliği sağlanabilirüzerinde kullanıcının güvenliği sağlanabilirve null etkili izin yok olduğunda güvenliği sağlanabilir sınıfını veya izni geçerli olmadığında 0 olduğunda has_perms_by_name 1 döndürür.Etkili bir izne aşağıdakilerden birini gösterir.
Doğrudan asıl adı verilen ve iptal edilmemiş bir izin.
Bir daha yüksek tarafından örtülü izni-düzey izni patron tarafından tutulan ve iptal edilmemiş.
Rol veya biri patron üyeolduğu ve değil engellendi gruba verilen izindir.
Rol veya biri patron üyeolduğu ve değil engellendi grup tarafından tutulan bir izin.
İzni değerlendirme her zaman arayan güvenlik bağlamında gerçekleştirilir.Arayan, başka bir kullanıcının etkin bir izne sahip olup olmadığını belirlemek için bu kullanıcıya özelliklerini Al izni olmalıdır.
Şemadüzey için varlıkları, bir, iki veya üç bölümlü geçirecektir adları kabul edilir.Veritabanı -düzey varlıklar için tek parça ad, bir null değeri anlamı "ile geçerli veritabanında" kabul edilir.Sunucu için kendisini, null değer (anlamı "geçerli sunucu") gereklidir.Bu işlev , bağlantılı sunucu veya hiç server -düzey sorumlusunun oluşturulan Windows kullanıcı izinleri denetleyemez.
Aşağıdaki sorgu yerleşik güvenliği sağlanabilir sınıflarının listesini döndürür:
SELECT class_desc FROM sys.fn_builtin_permissions(default)
Aşağıdaki alfabe kullanılır:
Geçerli veritabanı harmanlama: Güvenli hale bulunmayan bir şema tarafından güvenli hale Getirilebilenler içeren veritabanı -düzey Getirilebilenler; güvenli hale tek veya iki parça şema kapsamlı Getirilebilenler; üç bölümlü adı kullanırkenhedef veritabanı.
masterVeritabanı harmanlama: Server -düzey güvenli hale Getirilebilenler.
'ANY' sütuniçin -düzey denetler desteklenmiyor.Uygun izni belirtmeniz gerekir.
Örnekler
A.Sunucudüzey görünüm server state izni var mı?
SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');
B.Özelliklerini al sunucuya yapabilir miyim asıl Ps?
SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');
C.Geçerli veritabanında izinlerin zorundayım?
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
D.Asıl Pd sahip veritabanı geçerli veritabanında herhangi bir izni mu?
Arayan üzerinde asıl özelliklerini Al izni olduğunu varsayalım Pd.
EXECUTE AS user = 'Pd'
GO
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
GO
REVERT;
GO
E.Şema s yordamları ve tabloları oluşturabilirim?
Aşağıdaki örnek gerektirir ALTER izin S ve CREATE PROCEDURE izni veritabanında ve benzer tablolar.
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 tabloları select izni zorundayım?
SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name),
'OBJECT', 'SELECT') AS have_select, * FROM sys.tables
G.AdventureWorks2008R2 de satış temsilcisi tablo INSERT izni zorundayım?
Aşağıdaki örnek varsayar AdventureWorks2008R2 Benim geçerli veritabanı içeriği ve kullanan bir iki bölümü adı.
SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');
Aşağıdaki örnek, benim geçerli veritabanı içeriği hakkında hiçbir varsayımlar yapar ve üç bölümlü adı kullanır.
SELECT HAS_PERMS_BY_NAME('AdventureWorks2008R2.Sales.SalesPerson',
'OBJECT', 'INSERT');
H.tablo t hangi sütunların select izni zorundayım?
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');