我有一个网页,用户可以在其中配置 SQL Server 登录名和密码。我正在尝试对此页面实施验证。
我查找了 SQL Server 登录的要求,并找到了这篇 Microsoft 文章。根据那篇文章,SQL Server 登录名不能是保留的登录名。“sa”和“public”作为示例提供。未提供保留登录名的完整列表,我无法通过搜索找到一个。
是否有保留的 SQL Server 登录名列表?如果是这样,我在哪里可以找到它?
如果我尝试以下操作:
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 次登录。按照这个速度,测试所有可能的六个字符组合需要大约一年的时间,所以这似乎不是一个可行的方法。
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |