保留SQLServer权限

时间:2009-08-11 23:28:58

标签: sql-server sql-server-2005 tsql

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

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

有没有办法保留myuser的权限,而无需使用繁琐的备份权限和恢复权限类型的解决方法?

8 个答案:

答案 0 :(得分:3)

思想:

  1. DENY CONNECT userDENY CONNECT SQL TO loginsp_revokedbaccess已弃用)

  2. 您不能将ALTER_LOGIN与DISABLE参数一起使用以拒绝访问Windows组(引自链接)

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

  4. 如果用户具有sysadmin权限,则根本不能拒绝任何内容(可能是CONNECT SQL?)

  5. 如果用户具有db_owner权限(假设在DB中设置),则除了CONNECT

  6. 之外,您无法拒绝数据库中的任何内容。

答案 1 :(得分:2)

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

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

假设您的登录名是bob sql登录名,但也可以是Windows登录名

ALTER LOGIN bob DISABLE

然后,启用登录

ALTER LOGIN bob enable

答案 2 :(得分:1)

你应该能够明确拒绝他的许可,然后撤销拒绝。

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

黑客解决方案是将用户映射到不同的登录名,然后将他映射回来(ALTER USER .. LOGIN = ...),但这是一个黑客攻击,我甚至不确定是否正常工作。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

  

我们希望在维护期间删除访问权限,但在完成后将其恢复。

让维护过程获取其正在处理的任何表的独占锁。这会阻止所有人,直到处理完成。

答案 5 :(得分:0)

您可以将数据库切换到单用户模式吗? http://msdn.microsoft.com/en-us/library/ms345598.aspx

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

答案 6 :(得分:0)

如果已知当前密码,请在维护窗口期间将密码更改为临时值。将密码重新设置为初始值可实现此目的,而无需对帐户进行任何重大更改。

答案 7 :(得分:0)

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