我在Windows机器上运行了一个数据库"myDB“。用户(属于管理员组)使用Windows身份验证机制远程访问此服务器并登录到此数据库。
我想拒绝所有这些用户的drop对象权限,但这台机器中的实际管理员除外
P.S -所有其删除权限将被撤销的用户都属于Administrators用户组。
发布于 2011-12-21 13:13:37
如果登录名与您预期的不匹配,则使用DDL触发器来防止删除。酌情修改数据库名称和登录名。
USE myDB
GO
CREATE TRIGGER no_drop ON DATABASE FOR DROP_TABLE
AS
IF SUSER_SNAME() != 'DOMAIN\username'
BEGIN
RAISERROR('No table dropping.', 16, 1)
ROLLBACK TRANSACTION
END发布于 2011-12-21 13:46:25
这将生成撤销删除权限的代码,其中包括drop对象权限。您需要添加自己的筛选,以使其在您的环境中工作。先在测试环境中测试这个!
USE [myDB];
GO
SELECT DISTINCT
'REVOKE ' +
[dperm].[permission_name] COLLATE database_default +
' ON [' +
[s].[name] +
'].[' +
[o].[name] +
'] TO [' +
[dp].[name] +
'];' AS [sql_statement]
FROM [sys].[database_principals] AS [dp]
INNER JOIN [sys].[database_permissions] AS [dperm]
ON [dp].[principal_id] = [dperm].[grantee_principal_id]
INNER JOIN [sys].[objects] AS [o]
ON [dperm].[major_id] = [o].[object_id]
INNER JOIN [sys].[schemas] AS [s]
ON [o].[schema_id] = [s].[schema_id]
LEFT OUTER JOIN [sys].[columns] AS [c]
ON [dperm].[major_id] = [c].[object_id]
AND [dperm].[minor_id] = [c].[column_id]
WHERE [dp].[name] <> 'Administrator' --Change this to reflect your Administrator
AND [dperm].[state] = 'G'
AND [dperm].[type] = 'DL'希望这能帮上忙
哑光
https://dba.stackexchange.com/questions/9512
复制相似问题