在oracle

时间:2015-12-23 09:24:35

标签: sql sql-server oracle oracle11g escaping

我正在尝试在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重置程序不同。所以方法可以不同。

1 个答案:

答案 0 :(得分:0)

  

但如果生成的密码有&#34;或密码内的相同引号分隔符?那将是一个问题。

是的,当然。 Oracle 已将其记录在Object Names and Qualifiers中,同样适用于密码

来自documentation

  

密码必须遵循&#34;架构对象命名规则&#34;

部分中描述的规则

和最重要的部分:

  

不带引号的标识符只能包含来自的字母数字字符   您的数据库字符集和下划线(_),美元符号($),   和英镑符号(#)。数据库链接还可以包含句点(。)和   &#34;在&#34;标志(@)。 Oracle强烈反对使用$和#in   不带引号的标识符。

     

带引号的标识符可以包含任何字符和标点符号   以及空间。但是,既没有引用也没有引用标识符   可以包含双引号或空字符(\ 0)。

因此,引用不带引号的标识符都不能包含双引号

要允许单引号,您可以使用带引号的标识,使用双引号。例如,

SQL> create user test identified by "a'b'c";

User created.