在哪里可以找到保留登录的列表?

Rai*_*olt 3 sql-server logins

我有一个网页,用户可以在其中配置 SQL Server 登录名和密码。我正在尝试对此页面实施验证。

我查找了 SQL Server 登录的要求,并找到了这篇 Microsoft 文章。根据那篇文章,SQL Server 登录名不能是保留的登录名。“sa”和“public”作为示例提供。未提供保留登录名的完整列表,我无法通过搜索找到一个。

是否有保留的 SQL Server 登录名列表?如果是这样,我在哪里可以找到它?

Joe*_*ish 5

如果我尝试以下操作:

create login [public] WITH PASSWORD = '';
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

消息 15025,级别 16,状态 1,第 12 行

服务器主体“public”已存在。

这让我认为保留登录名是全新安装的 SQL Server 上存在的服务器主体。我可以通过此查询获得具有有效登录名的列表:

SELECT [name]
FROM sys.server_principals
WHERE [name] NOT LIKE '%\%';
Run Code Online (Sandbox Code Playgroud)

以下是 SQL Server 2016 中的结果:

???????????????????????????????????????????
?                  name                   ?
???????????????????????????????????????????
? sa                                      ?
? public                                  ?
? sysadmin                                ?
? securityadmin                           ?
? serveradmin                             ?
? setupadmin                              ?
? processadmin                            ?
? diskadmin                               ?
? dbcreator                               ?
? bulkadmin                               ?
? ##MS_SQLResourceSigningCertificate##    ?
? ##MS_SQLReplicationSigningCertificate## ?
? ##MS_SQLAuthenticatorCertificate##      ?
? ##MS_PolicySigningCertificate##         ?
? ##MS_SmoExtendedSigningCertificate##    ?
? ##MS_PolicyTsqlExecutionLogin##         ?
? ##MS_PolicyEventProcessingLogin##       ?
? ##MS_AgentSigningCertificate##          ?
???????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

文章中提到的两个例子都在结果集中。尝试使用这些名称中的任何一个创建登录似乎都失败了。例如,以下两种情况都失败:

create login [diskadmin] WITH PASSWORD = '';
create login [##MS_SmoExtendedSigningCertificate##] WITH PASSWORD = '';
Run Code Online (Sandbox Code Playgroud)

我不能肯定以上是完整的列表,但希望它有所帮助。

只是为了好玩,我尝试创建所有可能的字母数字登录,以查看哪些会引发错误。使用单个 CPU,我每秒只能创建和删除 55 次登录。按照这个速度,测试所有可能的六个字符组合需要大约一年的时间,所以这似乎不是一个可行的方法。