Aracılığıyla paylaş


HAS_PERMS_BY_NAME (Transact-SQL)

Geçerli bir güvenliği sağlanabilir geçerli kullanıcının iznini değerlendirir.Ilgili bir işlev fn_my_permissions.

Topic link iconTransact-SQL sözdizimi kuralları

HAS_PERMS_BY_NAME ( securable , securable_class , permission  
        [ , sub-securable ] [ , sub-securable_class ] )

Bağımsız değişkenler

  • securable
    güvenliği sağlanabilir adıdır.If the securable is the server itself, this value should be set to NULL.securable is a scalar expression of type sysname.Varsayılan yok.

  • securable_class
    Is the name of the class of securable against which the permission is tested.securable_class is a scalar expression of type nvarchar(60).

  • permission
    Bir nonnull skaler ifade türü sysname Denetlenecek izin ad, temsil eder. Varsayılan yok.Izni ANY joker karakter addır.

  • sub-securable
    Isteğe bağlı bir skaler ifade türü sysname hangi karşı izni sınanır bir güvenliği sağlanabilir sub-varlık adını temsil eder. Varsayılan değer NULL olur.

    Not

    Sürümlerinde SQL Server arasında SQL Server 2008 hizmet Pack 2 ' alt securables formda parantez kullanamazsınız ' [sub name'.Kullanımı 'adı sub ' yerine.

  • sub-securable_class
    Isteğe bağlı bir rakamsal ifade türü nvarchar(60) güvenliği sağlanabilir sınıflarını, karşı izni sınanır sınıfını gösteren. Varsayılan değer NULL olur.

Dönüş Türleri

int

Sorgu başarısız olduğunda, NULL döndürüyor.

Remarks

Bu yerleşik bir işlev, geçerli anapara bir belirli etkin izni belirtilen güvenliği sağlanabilir olup olmadığını sınar.Ve etkin izni yok kullanıcı güvenliği sağlanabilir üzerinde sahip olduğunda kullanıcı etkin güvenliği sağlanabilir, 0 izni zamanı 1 HAS_PERMS_BY_NAME # güvenliği sağlanabilir sınıfı veya izni geçerli değilse.Etkin bir izni aşağıdakilerden biri şudur:

  • Bir izni doğrudan asıl adı verilen ve değil engellendi.

  • Asıl ve değil engellendi tarafından tutulan bir üst düzey izni tarafından örtük BIR izindir.

  • Bir rolü veya; anapara üye ve değil engellendi grubuna BIR izni.

  • Rol veya; anapara üye ve değil engellendi grup tarafından tutulan BIR izindir.

Izni değerlendirme her zaman, arayanın güvenlik bağlamında gerçekleştirilir.Arayanın, başka bir kullanıcı için etkin bir izni olup olmadığını belirlemek için , bu kullanıcı özelliklerini Al izni olmalıdır.

Şema düzey varlıklar için bir-CVE-2006-, iki veya üç bölümlü nonnull adları kabul edilir.Veritabanı düzey varlıklar için tek parça ad, bir boş (null) değer anlamı "ile geçerli veritabanında" kabul edilir.Sunucu için kendisini, boş (null) değer (anlamı "geçerli sunucu") gereklidir.Bu işlev, bağlantılı sunucu ya da hiçbir sunucu düzeyinde sorumlusu oluşturulan bir 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 düzenlerinden kullanılır:

  • Geçerli veritabanı harmanlama: Üç bölümlü bir ad kullanıldığında, bir şema tarafından bulunan securables; bir veya iki bölümü kapsamlı şema securables, hedef veritabanı içeren veritabanı düzey securables.

  • asıl veritabanı harmanlama: Sunucu-CVE-2006-düzey securables.

  • 'ANY' desteklenmiyor sütun düzey denetler.Uygun izinlere belirtmeniz gerekir.

Örnekler

C.Sunucu düzeyinde SUNUCU DURUM VIEW izni zorundayım?

SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');

b.Özelliklerini AL sunucuya yapabilir miyim asıl adım?

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 bir veritabanı, geçerli veritabanındaki tüm izinleri mu?

Patron arayanın özelliklerini Al izni varsayalım. Pd.

EXECUTE AS user = 'Pd'
GO
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
GO
REVERT;
GO

e.Yordamları ve tabloları S şemada oluşturabilir MIYIM?

Aşağıdaki örnek gerektirir. ALTER izin S ve CREATE PROCEDURE Veritabanı ve benzer tablolar için izindir.

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ın 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.Satış elemanı AdventureWorks tablosunda bulunan Ekle izni zorundayım?

Aşağıdaki örnek varsayar. AdventureWorks Benim geçerli veritabanı içeriği ise ve bir iki bölümlü bir ad kullanılır.

SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');

Aşağıdaki örnek, benim geçerli veritabanının içeriği ile ilgili hiçbir varsayımlar yapar ve üç bölümlü bir ad kullanılır.

SELECT HAS_PERMS_BY_NAME('AdventureWorks.Sales.SalesPerson', 
    'OBJECT', 'INSERT');

h.Hangi sütunların Tablo T ı SELECT izniniz?

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