Eva*_*oll 2 sql-server linux database-internals sql-server-2017
在Linux上,SQL Server在哪里存储“SQL Server密码策略”和SA用户的密码?我明白了,“密码”不安全。
错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它太短。密码必须至少为 8 个字符..
进而,
错误:无法设置系统管理员密码:密码验证失败。该密码不符合 SQL Server 密码策略要求,因为它不够复杂。密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、基数 10 的数字和符号。
我猜该策略实际上已编译到数据库中?密码会存储在一个不起眼的位置吗?
用户是SQL Server登录名,其密码被加密并存储在数据库的sa
DMV sys.sql_logins
(数据库管理视图)中。master
参考: sys.sql_logins (Transact-SQL)
您可能会注意到这些视图只能在以下分支中找到:
Server | Databases | master | Views | System Views | ....
Run Code Online (Sandbox Code Playgroud)
DMV 引用一些可以访问(但不应该)的系统基表:
参考: 系统基表
您正在寻找的策略内置于 SQL Server 代码中,并为每个新帐户默认设置。创建 SQL Server 登录名时,您可以决定关闭默认设置:
要强制执行密码策略选项以实现复杂性和强制执行,请选择强制执行密码策略。有关更多信息,请参阅密码策略。当选择SQL Server 身份验证时,这是默认选项。
... 通过CHECK_POLICY=OFF
。查看完整语法:
CREATE LOGIN login_name { WITH <option_list1> | FROM <sources> }
<option_list1> ::=
PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ]
[ , <option_list2> [ ,... ] ]
<option_list2> ::=
SID = sid
| DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
| CHECK_EXPIRATION = { ON | OFF}
| CHECK_POLICY = { ON | OFF}
| CREDENTIAL = credential_name
<sources> ::=
WINDOWS [ WITH <windows_options>[ ,... ] ]
| CERTIFICATE certname
| ASYMMETRIC KEY asym_key_name
<windows_options> ::=
DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
Run Code Online (Sandbox Code Playgroud)
如果 SQL Server 是 Windows 域的成员,那么它将从 Active Directory 检索密码策略。否则默认值是:
密码复杂性策略旨在通过增加可能的密码数量来阻止暴力攻击。强制实施密码复杂性策略时,新密码必须符合以下准则:
- 密码不包含用户的帐户名。
- 密码长度至少为八个字符。
- 密码包含以下四类中三类的字符:
- 拉丁大写字母(A 到 Z)
- 拉丁小写字母(a 到 z)
- 基本 10 位数字(0 到 9)
- 非字母数字字符,例如:感叹号 ( !)、美元符号 ($)、数字符号 (#) 或百分号 (%)。
密码最长可达 128 个字符。您应该使用尽可能长且复杂的密码。
参考: 密码政策
归档时间: |
|
查看次数: |
8680 次 |
最近记录: |