WITH NO SYSTEM PRIVILEGE INHERITANCE
此子句阻止 SYS_RUN_REPLICATION_ROLE 系统角色的被授予者继承该角色的系统特权。通常,为某个用户或角色授予系统角色后,该角色及其被授予者都可使用该角色的系统特权。禁用 SYS_RUN_REPLICATION_ROLE 角色的系统特权的继承时,这些系统特权只能供角色使用,而不能供角色的被授予者使用。
提供 WITH NO SYSTEM PRIVILEGE INHERITANCE 子句是为了实现 SYS_RUN_REPLICATION_ROLE 系统角色的向后兼容性。通过为此角色禁用系统特权继承,可模拟 12 版本或更低版本数据库中不可继承的权限的行为。通过为此角色启用系统特权继承,可模拟所有系统角色和用户定义角色的行为。
在 SQL Remote 中,从消息代理建立连接时,SYS_RUN_REPLICATION_ROLE 系统角色使消息代理能够对数据库具有完全访问权限,从而使消息中包含所有更改。任何其它使用同一用户 ID 的连接都不会被授予特殊权限。
以任何其它方式与数据库建立连接时,用户都无法执行与此角色相关的任何特权。例如,用户无法使用 SELECT ANY TABLE 系统特权。
使用 SYS_RUN_REPLICATION_ROLE 系统角色,无需授予用户 ID 完全 DBA 特权,从而避免了与分发 DBA 用户 ID 和口令相关的安全问题。
例如,具有 SYS_RUN_REPLICATION_ROLE 系统角色的 SQL Remote 用户 ID 对除消息代理之外的任何连接均不具有额外的特权。即使此用户的用户 ID 和口令已广泛分发,也不存在安全问题。只要用户 ID 没有被授予除
CONNECT 之外的针对数据库的权限,就没有人可以使用该用户 ID 访问数据库中的数据。