代码之家  ›  专栏  ›  技术社区  ›  OpenSource

保留SQLServer权限

  •  1
  • OpenSource  · 技术社区  · 15 年前

    如何在一段时间内阻止特定用户访问数据库,但同时不丢失用户对数据库对象的权限。

    基本上,当他回来时(即当访问权被授予时),他应该在访问权被切断之前拥有所有的权限。如果我使用sp_revokedbaccess'myuser',用户myuser将失去对db对象的所有权限。

    有没有一种方法可以在不诉诸繁琐的备份权限和恢复权限的情况下保留我的用户的权限?

    8 回复  |  直到 15 年前
        1
  •  3
  •   gbn    15 年前

    思想:

    1. DENY CONNECT user DENY CONNECT SQL TO login ( sp_revokedbaccess 被贬低)

    2. 不能使用 ALTER_LOGIN 使用disable参数拒绝访问Windows组(从链接引用)

    3. 将所有权限分配给数据库角色,然后撤消用户的权限。需要时将用户添加到角色。无论如何,直接为用户分配对象权限是个坏主意。

    4. 如果用户拥有sysadmin权限,则完全不能拒绝它们(可能是connect sql?)

    5. 如果用户具有db_所有者权限(假定在db中设置),则除了connect之外,不能拒绝数据库中的任何内容。

        2
  •  2
  •   Nick Kavadias    15 年前

    我认为最简单的方法是禁用登录。您可以在状态页下的SSMS中的登录属性上执行此操作。

    您可以使用以下T-SQL实现相同的功能:

    假设您的登录名是Bob SQL登录名,但也可以是Windows登录名

    ALTER LOGIN bob DISABLE
    

    然后,启用登录

    ALTER LOGIN bob enable
    
        3
  •  1
  •   Remus Rusanu    15 年前

    您应该能够明确地拒绝他权限,然后撤销拒绝。

    您也可以禁用登录 ALTER LOGIN ... DISABLE ,但将在服务器级别而不是数据库级别阻止。

    黑客解决方案是将用户映射到另一个登录,然后将其映射回( ALTER USER .. LOGIN = ... 但这是一个黑客,我甚至不确定是否能正常工作。

        4
  •  0
  •   jdigital    15 年前

    用户如何访问数据库?如果通过应用程序,那么只需注销用户并要求用户重新进行身份验证。

        5
  •  0
  •   tpdi    15 年前

    我们想在维修过程中移除通道,但完成后再把他带回来。

    让维护进程获取正在处理的任何表的独占锁。这将锁定所有人,直到处理完成。

        6
  •  0
  •   russau    15 年前

    你能把数据库切换到单用户模式吗? http://msdn.microsoft.com/en-us/library/ms345598.aspx

    或者在删除权限之前编写权限脚本: http://www.sql-server-performance.com/articles/dba/object_permission_scripts_p1.aspx .我知道这是“备份权限和还原权限”——但是这个脚本使这个过程不那么麻烦。

        7
  •  0
  •   mherren    15 年前

    如果知道当前密码,请在维护窗口中将密码更改为临时值。将密码重新设置为其初始值就是为了达到这个目的,而不需要对帐户进行任何实质性的更改。

        8
  •  0
  •   Austin Salonen gmlacrosse    15 年前

    如果您使用的是Windows身份验证,并且可以将此用户从域中的所有内容锁定,则可以设置允许该用户登录Active Directory的时间。我不能提供详细的说明,但现在服务器上应该有故障。