这个事实记录在这里:
如果目标实体不是数据库并且实体正在转移给新所有者,则将删除目标上的所有权限。
在我面对事实之前,我对此一无所知。
有一天,需要向EXECUTE
某个用户授予对每个现有/未来存储过程的权限,这个用户只是db_datareader
数据库角色的成员,他不应该修改任何数据,但是一旦他拥有所有权链EXECUTE
他将能够通过存储过程修改数据的权限。所以我不得不打破所有权链并生成一个脚本,将所有现有表的授权更改为其他用户。
一旦更改了授权,该数据库中所有表的所有权限都消失了。我检查了上面提到的文档,发现记录了这种行为。但这很出乎意料(至少对我来说),所以我想知道是否有人有任何解释。他们为什么这样做?如果某个表的授权已更改,为什么需要删除该表的所有权限?
因为新所有者不希望获得一个其他人可以访问的对象?
想象一下买新房子。您希望其他人可以访问您的新房子吗?或者您是否会说由您决定将新房子的钥匙/密码分发给您信任的人?
很难回答“为什么”的问题,因为我们必须在做出决定时参加会议才能听到来回的推理。但以上是我的猜测。
(我认为这可能来自 SQL 标准,但似乎 ANSI/ISO SQL 中没有 ALTER AUTHORIZATION 命令......?)