本文转自:http://www.joyzhong.com/archives/643
方法一: ?? 配置derby.propertites文件:
文件内容:
derby.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!
名为‘sa’的数据库模式不存在。因为,derby在用户登录之后,会默认使用与用户名相同的模式,如果该模式不存在,就会报错。有两种方法解决这个问题:
第一,?? ?看下你的数据库存在的模式是什么名称?我的是app,那么创建一个名为app的用户,登录后直接就对app模式数据库进行操作了。
?
第二,?? ?不改用户名,直接用sa登录,登录之后运行这条语句:set schema app;再进行操作就OK了。无图无真相,看图:
别高兴得太早,让我们跑到另一个路径下执行ij,悲惨的事情即将发生:
看,我现在是在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,再运行:
这下不输入用户名和密码访问不了了吧。那么输入试试:
大功告成!不管你将数据库放到哪里,也不管你在哪里运行ij,都必须用用户名和密码来查询了。
如果要密码:还是运行上