Share via


has_perms_by_name (Transact-sql)

Geçerli kullanıcının bir güvenli hale getirilebilen etkili izne değerlendirir. İlgili işlevi fn_my_permissions.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

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

Bağımsız değişkenler

  • securable
    Güvenlik altına alınabilir adıdır. Güvenli hale getirilebilen sunucunun kendisi ise, bu değer null olarak ayarlanmalıdır. securablebir skalar ifade türü olan sysname. Orada hiçbir varsayılan vardır.

  • securable_class
    İzin karşı test edilmiş güvenlik altına alınabilir sınıf adıdır. securable_classbir skalar ifade türü olan nvarchar(60).

  • permission
    Bir nonnull skalar ifade türü sysnamekontrol edilmesi için izin adı temsil eder. Orada hiçbir varsayılan vardır. İzni herhangi bir joker karakter adıdır.

  • sub-securable
    İsteğe bağlı bir skalar ifade türü sysnamekarşı test izni güvenilir Sub-ENTITY adını temsil eder. Varsayılan değer NULL'tur.

    [!NOT]

    Sürümlerinde SQL Serverile SQL Server 2012, alt-securables şeklinde parantez kullanamazsınız ' [sub name'. Kullanım 'sub name' onun yerine.

  • sub-securable_class
    İsteğe bağlı bir skalar ifade türü nvarchar(60)karşı test izni güvenilir subentity sınıfını temsil eden. Varsayılan değer NULL'tur.

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 belirli etkili izni üzerinde belirli bir güvenilir olup olmadığını sınar. has_perms_by_name güvenlik altına alınabilir sınıf veya izni geçersiz olduğunda kullanıcının hiçbir etkili izni güvenilir ve null olduğunda kullanıcı etkin güvenilir, 0 izni 1 döndürür. Etkili bir izin aşağıdakilerden herhangi biri şöyledir:

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

  • Asıl ve değil engellendi tarafından düzenlenen üst düzey izni tarafından açık izni.

  • Bir rol veya biri anapara üyesi olduğu ve değil engellendi gruba verilen izni.

  • Rol veya biri anapara üyesi olduğu ve değil engellendi grup tarafından tutulan bir izin.

İzni değerlendirmesi her zaman arayan güvenlik bağlamında gerçekleştirilir. Başka bir kullanıcının etkin bir izne sahip olup olmadığını belirlemek için arayan bu kullanıcıya özelliklerini Al izni olmalıdır.

Şema düzeyi varlıklar için bir, iki veya üç bölümlü nonnull adlarını kabul edilir. Veritabanı düzeyinde varlıklar için tek parça ad, boş değer anlamı "geçerli veritabanı ile" kabul edilir. Sunucunun kendisi, boş değer (anlamı "geçerli sunucu") gereklidir. Bu işlev, bir bağlantılı sunucu veya kendisi için hiçbir sunucu düzeyinde anapara oluşturulan Windows kullanıcı izinleri denetleyemez.

Aşağıdaki sorgu yerleşik güvenlik altına alınabilir sınıflarının listesi döndürür:

   SELECT class_desc FROM sys.fn_builtin_permissions(default)
   SELECT class_desc FROM sys.fn_builtin_permissions(default)

Aşağıdaki alfabe kullanılır:

  • Geçerli veritabanı harmanlama: bir şema tarafından; bulunmayan securables içerir veritabanı düzeyinde securables tek veya iki parça şema kapsamlı securables; bir üç bölümlü adı kullanıldığında hedef veritabanı.

  • masterveritabanı harmanlama: sunucu düzeyinde securables.

  • 'BİRİSİ' sütun düzeyi denetimleri desteklenmez. Uygun izni belirtmeniz gerekir.

Örnekler

A.Sunucu düzeyinde VIEW server state izni var mı?

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

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

B.Özelliklerini Al sunucuya taşıyor asıl Ps?

SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');

SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');

C.Geçerli veritabanında herhangi bir izin var mı?

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');

D.Asıl Pd sahip veritabanı geçerli veritabanında herhangi bir izni nedir?

Arayan anapara özelliklerini Al izni vardır varsayalım Pd.

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

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

E.Yordamları ve tabloları şema s oluşturabilir miyim?

Aşağıdaki örnek gerektirir ALTERizin Sve CREATE PROCEDUREizni veritabanında ve benzer şekilde tablolar için.

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;

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 sahibim?

SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name), 
    'OBJECT', 'SELECT') AS have_select, * FROM sys.tables

SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name), 
    'OBJECT', 'SELECT') AS have_select, * FROM sys.tables

G.AdventureWorks2012 Satış Temsilcisi Tablo INSERT izni var mı?

Aşağıdaki örnek AdventureWorks2012zaman geçerli veritabanı içeriği ve iki bölümü adı kullanır.

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

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

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

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

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

H.Tablo t hangi sütunların select izni sahibim?

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

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.

Başvuru

sys.fn_builtin_permissionsilişkili (Transact-sql)

Güvenlik Kataloğu görünümleri (Transact-sql)

Kavramlar

Izinler (veritabanı altyapısı)

Securables

İzinleri hiyerarşi (veritabanı altyapısı)