为什么在 SQL Server 的系统数据库中没有提到 public 作为固定角色?

ige*_*elr 5 sql-server role system-tables

在跑步的时候

select * from sys.server_principals
Run Code Online (Sandbox Code Playgroud)

对于public角色,在列is_fixed_role中显示 0

在此处输入图片说明 在此处输入图片说明

但是文档指出它一个固定的服务器角色。 在此处输入图片说明

文档链接

虽然说public和其他角色有点不同,因为我们可以给它分配权限。无论如何,它被称为固定角色。

谁能解释这个困境?

Dav*_*oft 7

公众只是一只奇怪的鸭子。

但是要对文档应用一些追溯连续性,您可能会说所有这些内置角色都是“固定的”或不可更改的,而普通角色则不然。标记为的角色is_fixed_role具有固定的权限和可变的成员资格。Public 具有固定的成员资格(每个人)和可变的权限。

应记录 sys.server_principals 和 sys.database_principals 中的列以阐明这一点。


Kin*_*hah 5

我能想到的一个原因why public is NOT a fixed role - is_fixed_role是权限可以更改。

来自BOL

授予固定服务器角色的权限(除了 public无法更改)。

仅当您希望所有用户都可以使用对象时,才为任何对象分配公共权限。

注意:public 的实现方式与其他角色不同,可以从 public 固定服务器角色授予、拒绝或撤销权限。

其他固定服务器角色权限无法更改。