绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Apache Derby数据库用户和权限
2022-04-08 11:34:08

抽象

Apache Derby很棒! 尤其是在微服务环境中,服务的数据(可能)会缩减,并且不需要更强大的RDBMS。 Derby很棒,因为它非常易于使用,尤其是在涉及用户和权限时,您不需要任何东西! 但是,您可能想要创建一个具有有限权限的应用程序级用户,以在Derby中使用。 本博客的目的是记录如何在Derby中创建应用程序级别的受限权限用户。

免责声明

这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但终自己做出决定,风险自负。

要求

我使用以下主要技术完成了本文的所有工作。 您可能可以使用不同的技术或版本来做相同的事情,但不能保证。

  • Apache Derby 10.14.1.0
  • Java 1.8.0_152_x64

我将不涉及下载和安装这些技术的过程。 我将其留给您练习。

运行Derby网络服务器

您必须做的件事是运行Derby网络服务器。 在我之前的博客文章“ 同一主机上的多个Derby网络服务器”中 ,我提供了有关如何执行此操作的详细说明。 这是tldr; (对于Windows):

config-resiste.cmd

  1. @echo off
  2. REM --- START EDITING ---
  3. set DERBY_HOME=C:\Users\Michael\Applications\Derby\db-derby-10.14.1.0-bin
  4. set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_152
  5. set NS_HOME=C:\Users\Michael\Applications\Derby\servers\resiste\data
  6. set NS_PORT=11528
  7. REM --- STOP EDITING ---
  8. set PATH=%DERBY_HOME%\bin;%PATH%
  9. set DERBY_OPTS=-Dderby.drda.portNumber=%NS_PORT% -Dderby.system.home=%NS_HOME%

起始电阻

  1. @echo off
  2. call config-resiste.cmd
  3. StartNetworkServer

停止电阻

  1. @echo off
  2. call config-resiste.cmd
  3. StopNetworkServer

现在您可以运行Derby网络服务器,让我们对其进行配置。

配置Derby网络服务器

要配置Derby网络服务器,您需要创建一个derby.properties文件。 但是文件去哪了? 它可以在几个不同的地方去。 让我们来看看。

我首先假设您忽略了上面的“运行Derby网络服务器”部分,而是使用所有默认设置运行Derby。 如果是这种情况,您可能通过找到%DERBY_HOME%\bin\startNetworkServer.bat文件并双击来启动网络服务器。 如果这样做(强烈建议不%DERBY_HOME%\bin则Derby会认为%DERBY_HOME%\bin目录是其系统目录。 您可以通过查找%DERBY_HOME%\bin\derby.log文件来确认。 如果确认,则需要创建%DERBY_HOME%\bin\derby.properties文件。 无论derby.log文件在哪里,都可以在其中创建derby.properties文件。

另一方面,如果您没有忽略上面的“运行Derby网络服务器”部分,那么恭喜您! derby.properties文件必须进入-Dderby.system.home Java系统属性设置的目录中。 请参阅上面的config-resiste.cmd文件示例。

现在您知道将derby.properties文件放在derby.properties ,这里是(放置示例)其中的内容:

  1. # Passwords don't expire for 10 years
  2. derby.authentication.native.passwordLifetimeMillis=315360000000
  3. # Use the best hash algorithm you can
  4. derby.authentication.builtin.algorithm=SHA-512
  5. # Use a larger salt length for better security
  6. derby.authentication.builtin.saltLength=128
  7. # Re-hash this number of times for better security
  8. derby.authentication.builtin.iterations=1564

现在,您已经配置了网络服务器。 启动它,让我们使用它。 我们将使用它的件事是配置Derby管理员用户。 接下来我们来看。

运行ij

在配置Derby admin用户之前,我们首先需要运行ij应用程序。 ij对Derby而言是sqlplus对Oracle而言; 只是一个简单的命令行界面。 查找并运行%DERBY_HOME%\bin\ij.bat 。

注意对于博客的其余部分, "ij>"提示符将指示必须在ij执行的SQL命令。 我假设您会发现需要运行ij来执行这些命令。

现在ij正在运行,我们可以完成一些工作。 让我们看一下该Derby管理员用户。

创建管理员用户

现在,Derby网络服务器已配置并正在运行,我们需要配置admin用户。 管理员用户将具有执行任何数据库操作的完整权限。 让我们看一下命令:

  1. ij> connect 'jdbc:derby://localhost:11528/resiste;create=true;' user 'sa_resiste';
  2. ij> CALL SYSCS_UTIL.SYSCS_CREATE_USER('sa_resiste', 'derby123');
  3. ij> disconnect;
  4. ij> exit;

第1行是用于连接数据库的标准JDBC连接字符串。 数据库名称为resiste 。 由于这是次连接数据库,因此连接字符串包含create=true; 创建数据库。 我使用sa_resiste用户连接到数据库,并且由于是在次连接时创建数据库,因此sa_resiste用户将被设置为admin用户。 第2行使用密码derby123创建该用户。 然后,第3行和第4行与数据库断开连接并退出ij 。

立即重新启动网络服务器

重新启动后,让我们看看它是否有效。 使用sa_resiste连接,没有密码。 连接将获得身份验证失败。

  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste';
  2. ERROR 08004: Connection authentication failure occurred. Reason: Userid or password invalid.

现在使用sa_resiste和密码连接。 连接将成功。

  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123';
  2. ij>

好! 现在创建了admin用户。 接下来,我们将使用admin用户创建一个表。 该表将用于验证我们稍后将创建的应用程序级用户的权限。

创建测试表

现在,我们将使用admin用户创建测试表。 我们这样做有两个原因。

  1. 验证管理员用户是否具有所有权限,并且能够执行这些SQL命令。
  2. 验证稍后将创建的应用程序级用户的权限。
  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123';
  2. ij> create schema testing;
  3. ij> set schema testing;
  4. ij> create table names (full_name varchar(100));
  5. ij> insert into names values ('rita red');
  6. ij> select * from names;
  7. FULL_NAME
  8. ----------------------------------------------------------------------------------------------------
  9. rita red
  10. ij> disconnect;

接下来,让我们创建应用程序级用户。

创建应用程序用户

现在来看看有趣的东西。 让我们创建一个应用程序级用户。 这将是一个用户,其权限仅限于应用程序能够执行的操作。 例如,如果您的微服务仅用于获取数据,则应用程序级用户应仅对数据库表具有SELECT权限。 我们将测试应用程序级用户的权限,但首先让我们创建用户。

  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123';
  2. ij> CALL SYSCS_UTIL.SYSCS_CREATE_USER('oscar', 'orange');
  3. ij> disconnect;
  4. ij> exit;

立即重新启动网络服务器

重新启动后,让我们看看它是否有效。 与oscar 。 连接将成功,但是, oscar将无权读取测试表。

  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'oscar' password 'orange';
  2. ij> select * from testing.names;
  3. ERROR 42502: User 'OSCAR' does not have SELECT permission on column 'FULL_NAME' of table 'TESTING'.'NAMES'.
  4. ij> disconnect;

即使SELECT语句失败,失败也意味着测试成功。 oscar没有权限,因此应该不能从测试表中进行选择。 接下来让我们配置oscar 。

配置应用程序用户

让我们为oscar设置一些权限。 当然,需要sa_resiste管理员用户才能执行此操作。

  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'sa_resiste' password 'derby123';
  2. ij> set schema testing;
  3. ij> grant select on names to oscar;
  4. ij> disconnect;

这将只给oscar 1个许可:从TESTING.NAMES表中进行选择。 让我们看看它是否有效。

  1. ij> connect 'jdbc:derby://localhost:11528/resiste' user 'oscar' password 'orange';
  2. ij> select * from testing.names;
  3. FULL_NAME
  4. ----------------------------------------------------------------------------------------------------
  5. rita red
  6. ij> disconnect;

恭喜你! 现在,您的Derby数据库中具有一个应用程序级别的用户,其权限有限。

摘要

希望您喜欢学习如何使用Derby进行简单的用户管理。

翻译自: https://www.javacodegeeks.com/2018/05/apache-derby-database-users-and-permissions.html

分享好友

分享这个小栈给你的朋友们,一起进步吧。

ApacheDerby
创建时间:2022-04-08 11:22:42
ApacheDerby
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~