Sql server 禁用SA,创建新登录,将数据库角色成员身份更改为db所有者
我正在尝试在Sql server 禁用SA,创建新登录,将数据库角色成员身份更改为db所有者,sql-server,docker,tsql,ssms,Sql Server,Docker,Tsql,Ssms,我正在尝试在SSMS中编写一个测试T-SQL脚本,它禁用SA用户,创建一个新的sysadmin并为所有数据库启用db owner,就像SA用户一样 USE [master] GO /****** Create New Login ******/ CREATE LOGIN [bob] WITH PASSWORD = '!Bob1' GO /****** Change Server Role ******/ ALTER SE
SSMS
中编写一个测试T-SQL
脚本,它禁用SA
用户,创建一个新的sysadmin
并为所有数据库启用db owner
,就像SA
用户一样
USE [master]
GO
/****** Create New Login ******/
CREATE LOGIN [bob] WITH PASSWORD = '!Bob1'
GO
/****** Change Server Role ******/
ALTER SERVER ROLE [sysadmin] ADD MEMBER [bob]
GO
/****** Change Role Membership ******/
EXEC sp_addrolemember N'db_owner', N'bob'
GO
/****** Disable SA ******/
ALTER LOGIN [sa] DISABLE
GO
/****** Create Database ******/
CREATE DATABASE [test]
GO
但是,当我运行脚本时,会出现以下错误:
Msg 15410,11级,状态1,程序sp_addrolemember,第35行[批次开始第13行]
此数据库中不存在用户或角色“bob”
我知道我可以右键单击,转到属性,转到用户映射,并手动为所有数据库选择
db owner
,但脚本背后的意图是在启动时在MSSQL Docker容器中运行它。a登录
和用户
是两个完全不同的对象。登录
是实例级对象,用户
是数据库对象
对于系统管理员
,无需在数据库中创建用户
,除非您计划将数据库迁移到另一个实例,其中存在具有相同SID的登录
,并且该实例没有系统管理员
权限
sysadmin
可以在实例上执行它想要的任何操作,而不需要任何映射到它的USER
对象。它还忽略任何显式的DENY
权限。因此,如果它真的只是有一个系统管理员
,那么在每个数据库中创建一个用户
,然后给该用户
一个数据库所有者
角色就不需要了。当一个系统管理员连接到一个数据库时,他们会自动从用户
dbo
继承权限;这让他们可以在数据库中自由支配
如果您正在创建登录
和相关的用户
,则正确的语法如下:
使用master;
去
使用PASSWORD=N'Some really secure PASSWORD 123(*&AT')创建登录原则;
更改服务器角色sysadmin添加成员YourLogin;
去
使用你的数据库;
去
创建用户YourPrinciple用于登录YourPrinciple;
改变角色db_所有者添加成员YourPrinciple;
去
仅供参考,不要使用sp_addrolemember
;它将从SQL Server中删除。请使用ALTER ROLE
,如上所示。感谢您对sp_addrolember
的介绍和答案。我认为这现在是有意义的,所以您基本上是说如果我不想要用户
数据库对象,我不想要在我的例子中,我的新bob
-LOGIN
实例可以做他喜欢做的事情,即使db owner
没有映射到用户映射中的任何db
?你给登录名为bob
的服务器角色sysadmin
@user1574598。sysadmin
实际上可以在一个实例上做任何事情ce.从字面上说,我实际上是指字面上的意思。太好了,我现在明白了,所以我的脚本除了sp\u addrolemember
行之外没有任何问题。我还将为用户
数据库对象提供脚本解决方案,以解决您在回答中解释的情况。我想我之所以会感到困惑,是因为我注意到e> 右键单击sa
进入用户映射时,为dbo
用户选择了db owner
,model
,msdb,以及tempdb`数据库所有者,但没有为我的新bob
-登录名选择db owner。你有没有说过sysadmin
继承自dbo
e> 如果不正确,请道歉。不,这不是使用sp_addrolemember
,@user1574598,而是您试图提供一个不存在的用户(bob
)数据库角色db\u owner
。您不能将角色赋予不存在的用户。好吧,现在这也有意义,因此如果我在应用程序中更改连接字符串以使用bob
而不是当前设置的sa
,所有操作都应该完全相同。对不起,您在以前的edi中的帖子中说了什么关于sysadmin
继承自dbo
?