Implikowane/obejmujące uprawnienia (aparat bazy danych)

W SQL Server hierarchii uprawnień, przyznanie szczególnych uprawnień może przekazać prawa innych uprawnień przez implikacją.Wysokiego poziom uprawnień mogą być opisane jako obejmujące uprawnienia szczegółowe, niskiego poziom że oznacza.

dbo.ImplyingPermissions

Następujący przykładowy skrypt przyjmuje jako argumenty Nazwa klasy zabezpieczany i nazwę uprawnienia.Próbka przechodzi hierarchii uprawnień od określonego węzła do katalogu głównego: FORMANT serwera na serwerze.Próbki emituje listę uprawnień, które zawierają określone uprawnienie co za tym idzie.

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.Lista uprawnień, które implikują uprawnienie do zmiany schematu

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

B.Lista uprawnień, które implikują VIEW DEFINITION uprawnienia do obiektu

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

C.Lista uprawnień, które implikują na własność, uprawnienietrasa

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

D.Lista uprawnień, które implikują uprawnienie EXECUTE kolekcji schematu XML

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