考虑:
CString username="john['dow";
CString password="mypass";
ExecSQL("CREATE LOGIN ["+username+"] WITH PASSWORD = '"+password+"', CHECK_POLICY = OFF, DEFAULT_DATABASE = Voyager, CHECK_EXPIRATION = OFF"));
(其中ExecSQL在SQL服务器数据库上执行SQL)
使用括号作为用户名,因为它可能包含一个点
我检查密码不包含单引号(但我知道它可以安全地包含任何其他字符?)
我检查了用户名不包含结束括号。
是否有其他字符对用户名不安全?在这种情况下,特别是用户名的开放括号或单引号不安全?
由于
答案 0 :(得分:-1)
阅读本文,它将为您提供用户名和密码的最佳做法:
<强> LOGIN_NAME 强> 指定创建的登录名。登录有四种类型:SQL Server登录,Windows登录,证书映射登录和非对称密钥映射登录。在创建从Windows域帐户映射的登录时,必须使用格式为[\]的Windows 2000以前的用户登录名。您不能以login_name @ DomainName格式使用UPN。有关示例,请参阅本主题后面的示例D. SQL Server身份验证登录的类型为sysname,必须符合Identifiers的规则,并且不能包含“\”。 Windows登录可以包含'\'。基于Active Directory用户的登录仅限于少于21个字符的名称。
PASSWORD ='密码' 仅适用于SQL Server登录。指定正在创建的登录的密码。您应该使用强密码。有关更多信息,请参阅强密码和密码策略。从SQL Server 2012(11.x)开始,使用盐渍密码的SHA-512计算存储的密码信息。
密码区分大小写。密码长度应始终至少为8个字符,且不能超过128个字符。密码可以包括a-z,A-Z,0-9和大多数非字母数字字符。密码不能包含单引号或login_name。
PASSWORD = hashed_password 适用于:SQL Server 2008到SQL Server 2017。
仅适用于HASHED关键字。指定正在创建的登录名的密码的哈希值。