微软 SQL Server 2017 (RTM-CU16)
当尝试db_owner
通过作为数据库角色成员的用户更新统计信息时
EXEC sp_updatestats;
SQL Server 引发错误:
消息 15247,级别 16,状态 1,过程 sp_updatestats,第 15 行 [批处理开始行 0] 用户无权执行此操作。
尽管这里的 MS声明“数据库的所有权 (dbo)”就足够了,但似乎并非如此。
微软 SQL Server 2017 (RTM-CU16)
当尝试db_owner
通过作为数据库角色成员的用户更新统计信息时
EXEC sp_updatestats;
SQL Server 引发错误:
消息 15247,级别 16,状态 1,过程 sp_updatestats,第 15 行 [批处理开始行 0] 用户无权执行此操作。
尽管这里的 MS声明“数据库的所有权 (dbo)”就足够了,但似乎并非如此。
你误解了这句话
“数据库的所有权”表示此登录名拥有此数据库。
这与“是”的成员
db_owner database role
不同Owner
一个数据库是一个单一的login
,而 db_owners 可能有你想要的任意数量。事实上,如果你执行
在第一行你会发现:
这控制执行者是
sysadmin
服务器角色的成员还是owns
这个数据库的成员:suser_sid() <> @dbsid
where@dbsid
isowner_sid
of currentdatabase
。要找出某个数据库的所有者,您应该执行
您还可以使用 SSMS 找到它:
发生这种
sp_updatestats
行为是某种错误。解决它的一种方法是使用另一个 sp 然后授予用户execute
权限(如果没有db_owner
):