Derby用户名密码后续

分类:好好学习 | 标签: 发表于2010/04/28,20:46 | 14条评论

前几天我写了一篇:为Derby设置用户名和密码,但是没有考虑周全。现在我再整理一下,发布完整教程。

Derby设置密码教程

方法一:    配置derby.propertites文件:

文件内容:

.connection.requireAuthentication=true
derby.authentication.provider=BUILTIN
derby.user.username=password

将username和password改成你所需要的。我先设username为sa(这里会有问题,后面会讲),密码为password

把这个文件放到你的数据库所在的目录下。

然后打开cmd,进入数据库所在目录,运行ij工具,如果你不输入用户名和密码,只是输入如下语句:

Connect ‘jdbc:derby:testDataType;create=true’;

ij会提示你’ connection authentication failure occurred. Reason: Invalid authentication..’

所以,要运行以下语句:

Connect ‘jdbc:derby:testDataType;create=true;user=sa;password=password’;

接下来,如果你要对数据库进行操作,可能会出问题,试试select些数据,oops!


http://www.joyzhong.com/wp-content/gallery/my-life/1.jpg

名为‘sa’的数据库模式不存在。因为,derby在用户登录之后,会默认使用与用户名相同的模式,如果该模式不存在,就会报错。有两种方法解决这个问题:
第一,    看下你的数据库存在的模式是什么名称?我的是app,那么创建一个名为app的用户,登录后直接就对app模式数据库进行操作了。

http://www.joyzhong.com/wp-content/gallery/my-life/2.jpg

第二,    不改用户名,直接用sa登录,登录之后运行这条语句:set schema app;再进行操作就OK了。无图无真相,看图:

http://www.joyzhong.com/wp-content/gallery/my-life/7.jpg

别高兴得太早,让我们跑到另一个路径下执行ij,悲惨的事情即将发生:

http://www.joyzhong.com/wp-content/gallery/my-life/3.jpg

看,我现在是在c盘根目录下运行ij,没有用用户名和密码就直接可以查询数据库了。

怎么办呢?

下面讲第二种方法设置derby数据库密码。

方法二:    为某一个数据库设定密码。

前面讲的配置derby.properties文件是为derby数据库配置系统设置。也就是在数据库所在目录下,如果还存在其他数据库,他们也将会用derby.properties设置的用户名和密码来登录。如果在非derby.properties所在目录下运行ij,derby.properties将不再生效,ij将使用derby默认的embed模式的配置,也就是不需要用户名和密码即可查询数据库。

这不是我想要的(为什么要这样设计呢?我百思不得其解,如果是这样,别人只要知道你数据库的路径,然后在其他路径下用ij就可以随便改你的数据库了)。我希望,不管在哪里运行ij,都必须使用我设置好的用户名和密码来查询数据库。

请用ij连到数据库,然后运行以下语句:

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.authentication.provider’,
‘BUILTIN’);
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.connection.requireAuthentication’,
‘true’);
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.user.username’,
‘password’); ————这里username和password改成你的就可以了,下次登录时则要输入这里设置的。
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.database.fullAccessUsers’,
‘username’); ————这个username和前面那个一样
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.database.defaultConnectionMode’,
‘noAccess’);

退出ij,再运行:

http://www.joyzhong.com/wp-content/gallery/my-life/4.jpg

这下不输入用户名和密码访问不了了吧。那么输入试试:

http://www.joyzhong.com/wp-content/gallery/my-life/5.jpg

大功告成!不管你将数据库放到哪里,也不管你在哪里运行ij,都必须用用户名和密码来查询了。

如果要密码:还是运行上面的语句,把密码改成新的,再次运行数据库的时候就会要求输入新密码。

删密码,也就是改回不用用户名和密码登录:
只运行这一句:

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.connection.requireAuthentication’,
‘false’);

全部操作可在cmd内运用ij工具完成。用这种方法,可以不用derby.propertites文件了。但是必须牢记用户名和密码。

(完)

相关日志

日志信息 »

该日志于2010-04-28 20:46由 Joy 发表在好好学习分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。
14条评论:
  1. SuperBoo 说:

    说实话 我很悲哀 我只看了2个小时的derby 都知道 为什么 换目录就不用输入用户名密码了 并不是bug而是 因为derby的数据库系统是以文件形式存在的 你换了目录 就相当于不是一个数据库了 虽然你起得名字一样 你这么一弄 所有的数据库 都必须用这个用户名和密码了

    • Joy 说:

      这是实习做的项目,记录一下当时是怎么做的而已。需求是一定要密码的,至于你说这样所有的数据库都要用这个密码,当时我的确没有考虑这个问题。过去好久了,也没有再用derby。让您见笑了,惭愧惭愧。 :j

  2. junv 说:

    写的不错,很深入,在做初期开发的时候用derby是个好选择

  3. cluries 说:

    joy
    你在做什么样的应用呢?使用Derby

  4. Peter 说:

    昏死过去,真没看懂,再看~~~

  5. vv 说:

    只能说…好深奥!

  6. Firm 说:

    可以防止盗链!

  7. 第一先生 说:

    不错 可以收藏起来了 谢谢分享

  8. 冷笑话 说:

    不错!学习一下

  9. crossyou 说:

    图片都加水印了哈、

-------------------------------------------------------------

发表评论 »

emoticons

« »