写这个题目是因为一件很有趣的事情:
有一天,一个朋友跟我说,碰到一件很诡异的事情,就是安装数据库,每次到建立 sample 数据库的时候就死机。
我就说,那你之后再用 DBCA 建立数据库好了,先把软件安装好,看看有没有错。
他说,不是这个原因,查来查去,是因为定义用户的密码 password 的时候,用了一个符号“@”所以报错的。
我大笑,说,你现在知道 DBA 跟你们这些玩票的不一样了?Oracle 对 password 是有规定的,法定只允许三个符号,所有的 DBA 都知道的。
朋友愤怒!“就是因为 Oracle 这样變態的规定 Password 只能使用三个符号,就让你们这些 DBA 拿高薪么?”
我 nod,“DBA 总不能是只吃干饭的,不是么,总要花时间看文档,记住文档的内容吧”。
其实越来越惭愧,DBA 确实越来越没有什么可以骄傲的东西了,因为 Oracle 也在致力于,怎样更加容易的管理数据库界面。
还是来说说 Oracle 关于 password 有什么要求吧,在 11g 之前,Oracle 这样规定的:
1 . 1 到 30 个字符 (characters)
2. 开头的那个必须是字幕,不是符号或者数字
3. 只接受字母,数字,以及三个符号 "#", "_" and "$"
snow 有一些朋友非常喜欢挑战极限,你越不让我做,我就越做。如果我一定要用数字开头一个 password 行不行呢,答案是,行,不过你要用双引号:
SQL> create user test identified by "123abc";
User created.
SQL> grant create session to test;
Grant succeeded.
SQL> connect test/123abc
Connected.
SQL>
你可以去试验及其的极限挑战,但是生产系统还是听Oracle 的规定比较好。另外,还有两个符号比较麻烦,一个就是朋友提到过的 "@" 还有一个是 "&",你有兴趣自己去解决这两个麻烦,然后告诉 snow 我你的解决方法。snow 从来不给自己找这样的麻烦,不过你有解决方案,snow 还是非常感兴趣的。
Oracle 在新版本的 11g 中对 password 的要求作了一些,一些,恩找不到合适的词,不是改进,可以说是加强吧,也不完全是加强:
一,还是最长的 30 charactors 因为这个长度足够保险了,但是,官方文档说可以接受其他的字符,还是要加上双引号,哈哈,就是说,本来是 undoc 的功能,终于 doc 了,注意,还是需要双引号。還有一件事,就是接受了 multi-bytes 的字符,如果有漢化的環境,難道 password 能接受中文字?這倒是有趣,可惜我沒有漢化的環境,要不你們誰試驗一下?告訴我好玩不好玩。
二,请不要尝试 双引号的任何方向(英文的雙引號 “ ” 没方向?),这个斜线 "/" 逗号之类的出现在 password 中,用这寫东西在 password 裡面本來就很变态,如果你有兴趣,试验出来之后请告诉我怎么做成功的。
三、嗯嗯,终于接受了 password 的大小写的不同了,以前版本的 oracle 对待password 的大小写,是一视同仁的,现在如同 unix 系统那样可以区分。不过不用怕,这个功能用了一个 初始参数来控制:
sec_case_sensitive_logon
缺省值是 fales, 估计再过一两个版本,就要变成 true 了。详细的内容自己去看文档吧,我着急赶了去赴约会,差点忘了,給人電話追到手機上。