从SQL Server启动用户



我不确定如何提出这个问题。我们正在运行SQL Server 2008 R2。我不是管理员,而是程序员。我需要编写一个应用程序,该应用程序在晚上更新一些数据库内容。我将设置一个标志以禁用数据库的登录,但是即使某人已经登录了数据库,我也想使除了我以外的任何人都无法使用一个特定的数据库。我的程序将每晚作为批处理文件运行,大概是Admin特权。

我希望能产生类似SQL命令脚本的内容。我可以离线数据库,除了我需要自己进行修改。不确定处理此问题的最佳方法。

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

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

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

这将使数据库"单用户",例如只有您可以访问它,并且它将启动当前在线的任何用户,并且会回滚所有的开放式交易。

在MSDN上阅读有关单用户模式的更多信息!

此示例将数据库设置为Single_user模式以获取独家访问。终止选项WITH ROLLBACK IMMEDIATE在第一个ALTER DATABASE语句中指定。这将导致所有不完整的交易都被滚回去,与AdventureWorks2012数据库的任何其他连接都会立即断开连接。

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

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

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;

最新更新