0

我们对应用程序(NextGen ERH)要求使用sysadmin角色的凭据使用SQL Server(2016,本地)数据库。防止用户将数据库设置为单用户模式

我们的需求是防止技术用户将DB设置为单用户模式 ​​- 我们注意到有时会发生这种情况,并希望阻止未来的情况发生。

所以,问题是 - 我如何实现它? Revoke alter any database from username - 没有帮助,用户仍然可以将DB设置为单用户模式。

数据库用户对于SQL服务器是本地的,而不是Windows身份验证。

+3

你不能阻止系统管理员做任何事情 – DavidG

+1

^^^没错。用更少的权利创建用户。 –

+0

您将很难将这样的产品卖给基础设施团队 –

回答

0

如果你想防止单用户模式,整个数据库,你可以使用下面的代码

exec sp_dboption 'your_database_name_goes_here', 'single user', 'FALSE' 

的SQL Server版本高于2005

ALTER DATABASE 'your_database_name_goes_here' SET MULTI_USER 

如果你希望数据库是只能通过系统管理员设置为单服务器模式,您可以使用以下代码

ALTER DATABASE 'your_database_name_goes_here' 
SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE 

如果t他技术用户不属于系统管理员角色,那么上面的代码将阻止他将数据库设置为单用户模式。

编辑

要使用SSMS

  • 在对象资源管理器中设置一个数据库,以多用户模式,连接到SQL Server数据库 引擎实例,然后展开该实例。
  • 右键单击要更改的数据库,然后单击“属性”。
  • 在数据库属性对话框中,单击选项页面。
  • 从“限制访问”选项中,选择“多个”。
  • 如果其他用户连接到数据库,则会显示“打开连接”消息。要更改该属性并关闭所有其他连接,请单击是。
+0

sp_dboption是从SQL Server 2005,并已被删除,因为该版本https://technet.microsoft.com /en-us/library/ms187310(v=sql.105).aspx。我们在SQL Server 2016上,忘记提及 – vyarovoy

+0

您可以使用ALTER DATABASE'your_database_name_goes_here'SET MULTI_USER作为替代方案 –

+0

这一切都很清楚如何进入单用户模式并返回。原来的问题是 - 如何防止(例如通过撤销权限)用户在单一模式下设置数据库。特殊情况 - 用户具有sysadmin数据库角色。 – vyarovoy