首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拒绝所有其他用户的删除权限,实际管理员除外- Server 2008

拒绝所有其他用户的删除权限,实际管理员除外- Server 2008
EN

Database Administration用户
提问于 2011-12-21 09:30:55
回答 2查看 1.6K关注 0票数 1

我在Windows机器上运行了一个数据库"myDB“。用户(属于管理员组)使用Windows身份验证机制远程访问此服务器并登录到此数据库。

我想拒绝所有这些用户的drop对象权限,但这台机器中的实际管理员除外

P.S -所有其删除权限将被撤销的用户都属于Administrators用户组。

EN

回答 2

Database Administration用户

发布于 2011-12-21 13:13:37

如果登录名与您预期的不匹配,则使用DDL触发器来防止删除。酌情修改数据库名称和登录名。

代码语言:javascript
复制
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
票数 1
EN

Database Administration用户

发布于 2011-12-21 13:46:25

这将生成撤销删除权限的代码,其中包括drop对象权限。您需要添加自己的筛选,以使其在您的环境中工作。先在测试环境中测试这个!

代码语言:javascript
复制
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'

希望这能帮上忙

哑光

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/9512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档