【发布时间】:2013-02-08 21:43:14
【问题描述】:
我需要在 TSQL 中创建一个新密码,该密码需要 8 个字符 (a-z),其中必须包含大小写字符以及至少一个数字。
谁能帮我解决这个问题?
【问题讨论】:
-
你想让服务器为你随机生成一个密码吗?
-
这似乎符合所有规定的要求:从 myTable 中选择 'abc1DEF2'
标签: sql sql-server tsql
我需要在 TSQL 中创建一个新密码,该密码需要 8 个字符 (a-z),其中必须包含大小写字符以及至少一个数字。
谁能帮我解决这个问题?
【问题讨论】:
标签: sql sql-server tsql
这里有一个选项可以为您提供非常随机的密码。它使用numbers table,但除此之外相当简单。
declare @chars char(62), @bytes binary(8)
set @chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
set @bytes = CRYPT_GEN_RANDOM(8)
select SUBSTRING(@chars, (SUBSTRING(@bytes, n.Number, 1) % LEN(@chars)) + 1, 1)
from dbo.Numbers n
where n.Number between 1 and LEN(@bytes)
FOR XML PATH ('')
【讨论】:
CRYPT_GEN_RANDOM() 是在 SQL Server 2008 中引入的。
需要考虑的事情,有点复杂:
SELECT TOP 8
SUBSTRING(tblSource.vsSource, tblValue.number + 1, 1) AS vsChar
FROM (SELECT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' AS vsSource) AS tblSource
JOIN master..spt_values AS tblValue
ON tblValue.number < len(tblSource.vsSource)
WHERE tblValue.type = 'P'
ORDER BY NEWID()
但非常随机。
【讨论】:
select ( SELECT TOP 8 SUBSTRING(tblSource.vsSource, tblValue.number + 1, 1) FROM (SELECT 'abcdefhkmnpqrstuvwxyzABCDEFHKMNPQRSTUVWXYZ23456789+=-_~#$%*()' AS vsSource) AS tblSource JOIN master..spt_values AS tblValue ON tblValue.number < len(tblSource.vsSource) WHERE tblValue.type = 'P' ORDER BY NEWID() FOR XML PATH ('') )
select cast((Abs(Checksum(NewId()))%10) as varchar(1)) +
char(ascii('a')+(Abs(Checksum(NewId()))%25)) +
char(ascii('A')+(Abs(Checksum(NewId()))%25)) +
left(newid(),5)
from yourTable
【讨论】: