从SQL Server引导用户

时间:2012-10-23 12:26:19

标签: database sql-server-2008-r2 offline

我不确定如何问这个问题。我们正在运行SQL Server 2008 R2。我不是管理员,而是程序员。我需要编写一个应用程序,在晚上更新一些数据库的东西。我将设置一个标志来禁用对数据库的登录,但是我想让除了我之外的任何人都无法使用特定的数据库,即使有人已经登录到数据库。我的程序将作为批处理文件每晚运行,可能具有管理员权限。

我期望生成类似SQL命令脚本的东西。我可以使数据库脱机,除了我需要自己修改它。不确定处理此问题的最佳方法。

2 个答案:

答案 0 :(得分:5)

您基本上只需将数据库设置为“单用户”模式并专门使用它 - 此T-SQL将执行此操作:

USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

(当然 - 用您自己的数据库名称替换AdventureWorks2012!)

这将使数据库成为“单用户”,例如只有你有权访问它,它才能启动当前在线的任何用户,并将回滚所有未完成的交易。

Read more about single user mode on MSDN

  

此示例将数据库设置为SINGLE_USER模式以获取独占访问权限。终止选项WITH ROLLBACK IMMEDIATE在第一个ALTER DATABASE语句中指定。这将导致回滚所有未完成的事务,并且立即断开与AdventureWorks2012数据库的任何其他连接。

答案 1 :(得分:1)

由于您使用的是管理帐户来执行更新,因此我假设该帐户属于以下角色之一:db_ownerdbcreatorsysadmin。在DML操作期间使用ALTER DATABASE SET ...语法控制数据库访问。

假设您要锁定的数据库用户不在上述角色中。

USE master;

-- only allow members of db_owner, dbcreator, or sysadmin roles to access
-- database, allowing current transactions time to complete. if you want to
-- drop access immediately, add WITH ROLLBACK IMMEDIATE
ALTER DATABASE SET RESTRICTED_USER;

-- data load

-- return database to normal operating state
ALTER DATABASE SET MULTI_USER;