Udostępnij za pośrednictwem


Covering/Implied Permissions (Database Engine)

W ramach SQL Server Hierarchia uprawnień nadawanie uprawnień do określonej może przekazać prawa inne uprawnienia przez domniemanie. Wysoki poziom uprawnień mogą być oznaczone jako w odniesieniu do obszarów uprawnienia szczegółowe, niskiego poziomu że pociąga za sobą.

dbo.ImplyingPermissions

Następujący przykładowy skrypt przyjmuje jako argumenty Nazwa klasy zabezpieczany oraz nazwę uprawnienia.Próbka który przechodzi i hierarchii uprawnień od określonego węzła do katalogu głównego: Kontrola serwera na serwerze. Próbka emituje listy uprawnień, które zawierają określone uprawnienie przez domniemanie.

CREATE FUNCTION dbo.ImplyingPermissions (@class nvarchar(64), 
   @permname nvarchar(64))
RETURNS @ImplPerms table (permname nvarchar(64), 
   class nvarchar(64), height int, rank int)
AS
BEGIN
   WITH 
   class_hierarchy(class_desc, parent_class_desc)
   AS
   (
   SELECT DISTINCT class_desc, parent_class_desc 
      FROM sys.fn_builtin_permissions('')
   ),
   PermT(class_desc, permission_name, covering_permission_name,
      parent_covering_permission_name, parent_class_desc)
   AS
   (
   SELECT class_desc, permission_name, covering_permission_name,
      parent_covering_permission_name, parent_class_desc
      FROM sys.fn_builtin_permissions('')
   ),
   permission_covers(permission_name, class_desc, level,
      inserted_as)
   AS
    (
    SELECT permission_name, class_desc, 0, 0
       FROM PermT
       WHERE permission_name = @permname AND
       class_desc = @class
    UNION ALL
    SELECT covering_permission_name, class_desc, 0, 1
       FROM PermT 
       WHERE class_desc = @class AND 
          permission_name = @permname AND
          len(covering_permission_name) > 0
    UNION ALL
    SELECT PermT.covering_permission_name, 
       PermT.class_desc, permission_covers.level,
       permission_covers.inserted_as + 1
       FROM PermT, permission_covers WHERE
       permission_covers.permission_name =
       PermT.permission_name AND
       permission_covers.class_desc = PermT.class_desc 
       AND len(PermT.covering_permission_name) > 0
    UNION ALL
    SELECT PermT.parent_covering_permission_name,
       PermT.parent_class_desc,
       permission_covers.level + 1,
       permission_covers.inserted_as + 1
       FROM PermT, permission_covers, class_hierarchy
       WHERE permission_covers.permission_name =
       PermT.permission_name AND 
       permission_covers.class_desc = PermT.class_desc
       AND permission_covers.class_desc = class_hierarchy.class_desc
       AND class_hierarchy.parent_class_desc =
       PermT.parent_class_desc AND
       len(PermT.parent_covering_permission_name) > 0
    )
  INSERT @ImplPerms
  SELECT DISTINCT permission_name, class_desc, 
     level, max(inserted_as) AS mia 
     FROM permission_covers
     GROUP BY class_desc, permission_name, level
     ORDER BY level, mia
  RETURN
END

A.Wyświetlanie listy uprawnień, które pociąga za sobą uprawnienie ALTER schematu

SELECT * FROM dbo.ImplyingPermissions('schema', 'alter')

B.Wyświetlanie listy uprawnień, które pociąga za sobą uprawnienie VIEW definicja obiektu

SELECT * FROM dbo.ImplyingPermissions('object', 'view definition') 

C.Wyświetlanie listy uprawnień, które pociąga za sobą uprawnienie UWZGLĘDNAIJĄ własności na trasie

SELECT * FROM dbo.ImplyingPermissions('route', 'take ownership')

D.Wyświetlanie listy uprawnień, które pociąga za sobą uprawnienie wykonać kolekcja schematów XML

SELECT * FROM dbo.ImplyingPermissions('xml schema collection', 'execute')