如何阻止特定用户访问数据库一段时间,但同时不会丢失用户对db对象的权限。
基本上当他回来时(即回访时),他应该拥有他访问被切断之前的所有权限。如果我使用sp_revokedbaccess'myuser',则用户myuser将丢失他对db对象的所有权限。
有没有办法保留myuser的权限,而无需使用繁琐的备份权限和恢复权限类型的解决方法?
答案 0 :(得分:3)
思想:
DENY CONNECT user或DENY CONNECT SQL TO login(sp_revokedbaccess已弃用)
您不能将ALTER_LOGIN与DISABLE参数一起使用以拒绝访问Windows组(引自链接)
为数据库角色分配所有权限,然后撤消用户的权限。需要时将用户添加到角色。无论如何直接将对象权限分配给用户是个坏主意。
如果用户具有sysadmin权限,则根本不能拒绝任何内容(可能是CONNECT SQL?)
如果用户具有db_owner权限(假设在DB中设置),则除了CONNECT
答案 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上应该有一些内容。