我正在尝试在oracle和sql-server中重置用户密码的Java程序。此密码是随机生成的密码,其中包含一些不能作为普通字符串接受的字符。例如。 '
,""
,;
我用来重置用户密码的命令是:
预言:
ALTER USER <username> IDENTIFIED BY <password>
SQL服务器:
ALTER LOGIN <username> WITH PASSWORD = '<passowrd>'
如何重置以便它可以接受所有类型的特殊字符?
我做了谷歌并发现了quoting method:。我也发现了使用单个代码和双重代码。但是如果生成的密码在该密码中有"
或相同的引号分隔符怎么办?那将是一个问题。
Eg. IDENTIFIED BY 'jks'k"fjh''d'
Eg. password = q[#kkksdj#jsksls#]
Eg. password = "nm.js""kh:kjhs"
我有什么方法可以在oracle和sql-server中执行此操作吗?或者我是否需要在发送到oracle / sql-server之前逐个从java中转义每个字符?我的oracle和sql-server重置程序不同。所以方法可以不同。
答案 0 :(得分:0)
但如果生成的密码有&#34;或密码内的相同引号分隔符?那将是一个问题。
是的,当然。 Oracle 已将其记录在Object Names and Qualifiers中,同样适用于密码。
密码必须遵循&#34;架构对象命名规则&#34;
部分中描述的规则
和最重要的部分:
不带引号的标识符只能包含来自的字母数字字符 您的数据库字符集和下划线(_),美元符号($), 和英镑符号(#)。数据库链接还可以包含句点(。)和 &#34;在&#34;标志(@)。 Oracle强烈反对使用$和#in 不带引号的标识符。
带引号的标识符可以包含任何字符和标点符号 以及空间。但是,既没有引用也没有引用标识符 可以包含双引号或空字符(\ 0)。
因此,引用和不带引号的标识符都不能包含双引号。
要允许单引号,您可以使用带引号的标识,使用双引号。例如,
SQL> create user test identified by "a'b'c";
User created.