Ich habe zwei Logins login1
und login2
. login1
hat sysadmin
Server-Rolle und ich möchte login2
einige Berechtigungen bedingt im Kontext von login1
gewähren.Wie eine Berechtigung zu einer Anmeldung hinzufügen, wenn es nicht in SQL Server ist?
Nach etwas googeln fand ich die Funktion HAS_PERMS_BY_NAME
kann verwendet werden, um zu testen, ob ein Benutzer (aktueller Benutzer) eine Berechtigung hat. Also schrieb ich den folgenden Code:
EXECUTE AS LOGIN = 'login2';
IF HAS_PERMS_BY_NAME(NULL, NULL, 'VIEW DEFINITION') != 1
GRANT VIEW ANY DEFINITION TO login2;
IF HAS_PERMS_BY_NAME(NULL, NULL, 'VIEW SERVER STATE') != 1
GRANT VIEW SERVER STATE TO login2;
REVERT;
Aber ich bekam die folgende Fehlermeldung, wenn ich es ausgeführt:
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
, die angemessen ist, weil ich Berechtigungen im Kontext der login2
Gewährung, die nicht ist richtig. Also änderte ich meinen Code wie folgt:
EXECUTE AS LOGIN = 'login2';
IF HAS_PERMS_BY_NAME(NULL, NULL, 'VIEW DEFINITION') != 1
BEGIN
REVERT;
GRANT VIEW ANY DEFINITION TO login2;
END
EXECUTE AS LOGIN = 'login2';
IF HAS_PERMS_BY_NAME(NULL, NULL, 'VIEW SERVER STATE') != 1
BEGIN
REVERT;
GRANT VIEW SERVER STATE TO login2;
END
Aber immer noch habe ich genau die gleiche Fehlermeldung, wenn ich es ausgeführt habe. Kann mir jemand helfen, mir die richtige Richtung zu zeigen? Vielen Dank.
Try 'ausführen als user =‚login2'' nicht 'als login' – artm