我的 SSMS 登录(使用 AD 组)分配了除 sysadmin 之外的所有服务器角色,因此我有很多访问权限。
使用这个登录,我已经从它的 .bak 文件中恢复了一个数据库。但是,在备份此数据库之前,我的登录名没有映射到用户,所以当它恢复时,我没有映射到任何用户。但是,如果我进入数据库属性 > 文件,所有者就是我(尽管它是我的个人 Windows 帐户,而不是我在 SQL 中使用的 AD 组登录)。
我不确定这会如何影响事情,但这意味着我仍然可以读取/写入数据库中的所有表,即使我的登录名不是该数据库中的用户。因此,我想在此数据库上为我的 AD 组登录创建一个成功运行的用户。但是当我尝试将此新用户分配给任何数据库角色时,它说我没有权限。
我错过了哪些步骤?我需要哪些权限才能将数据库角色分配给此还原数据库上的新用户?
尽管您将登录名视为数据库的所有者,但由于您从
select user_name()
和获得的输出,我不认为该信息是准确的select is_member('db_owner')
。我认为 SQL Server 会误导您。公共数据库角色可以解释读取/写入数据库上每个表的权限。关于无法向角色添加新成员:
由于您不是 的成员
db_owner
,因此您将无法在数据库角色上添加用户。医生说:所有权问题:
当您尝试获取数据库的所有权(这是添加到 db_owner 角色的一种方式)时,您收到了错误
因为作为除 之外的所有服务器角色的成员
sysadmin
,正如您所描述的,不会授予您TAKE OWNERSHIP
orIMPERSONATE
权限,并且数据库文档的 ALTER AUTHORIZATION 说需要这些权限:您可以从sys.fn_my_permissions中检查您是否具有这些权限,并在连接到恢复的数据库时运行以下查询:
如果没有返回任何行,则意味着您将无法更改数据库的所有者并更改您可能需要
sysadmin
执行ALTER AUTHORIZATION
或授予您足够的权限来执行此操作。授予所需的权限:
注意:将成为数据库所有者的登录名不能是该数据库上的现有用户,否则您将收到以下错误:
进一步阅读: SQL Server 权限图表包含作为固定角色(服务器和数据库级别)成员获得的所有权限。
为了解决这个问题,我允许我的用户模拟 dbo 用户,这样我就可以更改固定的数据库角色。