【问题标题】:Sql Password Generator - 8 characters, upper and lower and include a number [closed]Sql密码生成器 - 8个字符,大写和小写,包括一个数字[关闭]
【发布时间】:2013-02-08 21:43:14
【问题描述】:

我需要在 TSQL 中创建一个新密码,该密码需要 8 个字符 (a-z),其中必须包含大小写字符以及至少一个数字。

谁能帮我解决这个问题?

【问题讨论】:

  • 你想让服务器为你随机生成一个密码吗?
  • 这似乎符合所有规定的要求:从 myTable 中选择 'abc1DEF2'

标签: sql sql-server tsql


【解决方案1】:

这里有一个选项可以为您提供非常随机的密码。它使用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 ('')

【讨论】:

  • 如果数字表有问题,@Joseph Lee 使用的 spt_values 就足够了。
  • +1 因为“微软可以在没有警告的情况下更改未记录的系统表,因此您应该避免使用它们。”这就是为什么你的解决方案比另一个更好。
  • 如果使用 SQL Server 2005 或更低版本则不好 CRYPT_GEN_RANDOM() 是在 SQL Server 2008 中引入的。
【解决方案2】:

需要考虑的事情,有点复杂:

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 &lt; len(tblSource.vsSource) WHERE tblValue.type = 'P' ORDER BY NEWID() FOR XML PATH ('') )
  • @AntonKruglov 它确实有效,只是将每个值放在单独的行中。仍然感谢我正在寻找的返工。
【解决方案3】:
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

【讨论】:

  • 保证密码符合要求的好答案,但请注意,由于结构是可预测的,因此有效强度会大大降低。
  • 同意。 OP 必须决定它是否对他来说足够强大。
  • +1 很好,回答。非常简单且有效。
  • 感谢伙伴.. 像魅力一样工作
  • @DotNet - 欢迎您。
猜你喜欢
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2019-06-05
  • 2016-07-05
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多