как узнать кто и когда поменял разрешения / гранты в хранимой процедуре - PullRequest
1 голос
/ 23 апреля 2009

В SQL Server 2005 есть хранимая процедура, в которой пользователи утверждают, что разрешение на выполнение было удалено, поскольку они больше не могут выполнять хранимую процедуру.

Я пытался найти его в файлах трассировки, но не могу найти запись для этой хранимой процедуры

У меня вопрос, есть ли другой способ узнать, кто и когда изменил разрешение / предоставление этой хранимой процедуры?

Ответы [ 4 ]

1 голос
/ 23 апреля 2009

К сожалению нет. Необходимо провести аудит (например, с помощью триггеров DDL) фактического оператора REVOKE или DENY.

Однако, если процедура была удалена и воссоздана, изменения разрешения на аудит отсутствуют. Вы можете запросить sys.objects, чтобы получить create_date и modify_date, чтобы узнать, произошло ли это.

Существуют и другие параметры, такие как удаление входа в систему, поэтому, даже если разрешения не изменились, пользователи больше не могут выполнять код. Или группа NT изменилась при использовании аутентификации Windows. Явный REVOKE / DENY или DROP / CREATE не может быть очевидным ответом.

Редактировать, основываясь на комментарии:

В вашем вопросе говорилось: "пользователи утверждают, что разрешение на выполнение было удалено ...". Помимо явных сохраненных изменений разрешений процедур, среда могла измениться. То есть, что если:

  • пользователей исключили из группы
  • логин был удален и воссоздан без сопоставления пользователей в базе данных
  • групповая политика изменилась, так что группа NT больше не может обращаться к SQL Server (для них нужно «Разрешить вход из сети»)

Изменились ли права на сохраненный процесс или изменился способ получения пользователем хранимых процедур?

1 голос
/ 15 декабря 2013
select P.permission_name,  
P.state_desc,
U.name GranteeName, 
U2.name GrantorName, 
T.*
from sys.database_permissions P 
JOIN sys.objects  T  ON P.major_id = T.object_id 
JOIN sysusers U  ON U.uid = P.grantee_principal_id
JOIN sysusers U2 ON U2.uid = P.grantor_principal_id
ORDER by T.modify_date  desc

Unfortunately, the 'who' is typically 'dbo'...
1 голос
/ 23 апреля 2009

Восстановить резервную копию?

0 голосов
/ 19 октября 2018
Select      memb.Name As UserName,
            prin.Name As RoleName,
            perm.permission_name As PermissionType,
            schm.name As SchemaName,
            objt.Name As ObjectName,
            perm.state_desc As PermissionState,
            memb.Create_Date ,
            memb.Modify_Date
from        sys.database_principals memb
Left Join   sys.database_role_members rolm 
            on rolm.Member_principal_id = memb.Principal_id  
Left Join   sys.database_principals prin 
            on rolm.Role_principal_id = prin.Principal_id
Left Join   sys.database_permissions perm 
            on memb.Principal_id = perm.grantee_principal_id  
Left Join   sys.all_objects objt 
            on perm.Major_Id = objt.Object_Id
Left Join   sys.Schemas schm 
            on objt.schema_id = schm.schema_id
Order By    memb.Name, 
            prin.Name, perm.permission_name, 
            objt.Name, perm.state_desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...