Geo*_*e K 3 sql-server permissions
Microsoft SQL Server 2017 (RTM-CU16)
尝试db_owner通过作为数据库角色成员的用户更新统计信息时
EXEC sp_updatestats;
SQL Server 抛出错误:
消息 15247,级别 16,状态 1,过程 sp_updatestats,第 15 行 [批处理起始行 0] 用户无权执行此操作。
即使 MS在这里声明“数据库的所有权(dbo)”就足够了,但似乎并非如此。
你误解了这句话
需要 sysadmin 固定服务器角色的成员身份,或数据库 (dbo) 的所有权
“数据库所有权”表示此登录名拥有此数据库。
这是不一样的“是一员db_owner database role”
Owner一个数据库是一个login,而 db_owners 可能是你想要的。
事实上,如果你执行
exec sp_helptext 'sp_updatestats';
Run Code Online (Sandbox Code Playgroud)
在第一行你会发现:
declare @dbsid varbinary(85)
select @dbsid = owner_sid
from sys.databases
where name = db_name()
-- Check the user sysadmin
if not is_srvrolemember('sysadmin') = 1 and suser_sid() <> @dbsid
begin
raiserror(15247,-1,-1)
return (1)
end
Run Code Online (Sandbox Code Playgroud)
这控制执行者是sysadmin服务器角色的成员还是owns此数据库的成员:suser_sid() <> @dbsidwhere @dbsidis owner_sidof current database。
要找出某些数据库的所有者,您应该执行
select owner_sid
from sys.databases
where name = 'some_db';
Run Code Online (Sandbox Code Playgroud)
您也可以使用 SSMS 找到它:
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |