Apache Derby数据库用户和权限

抽象

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

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

起始电阻

@echo off
call config-resiste.cmd
StartNetworkServer

停止电阻

@echo off
call config-resiste.cmd
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 ,这里是(放置示例)其中的内容:

# Passwords don't expire for 10 years
derby.authentication.native.passwordLifetimeMillis=315360000000

# Use the best hash algorithm you can
derby.authentication.builtin.algorithm=SHA-512

# Use a larger salt length for better security
derby.authentication.builtin.saltLength=128

# Re-hash this number of times for better security
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用户。 管理员用户将具有执行任何数据库操作的完整权限。 让我们看一下命令:

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

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

立即重新启动网络服务器

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

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

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

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

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

创建测试表

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

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

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

创建应用程序用户

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

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

立即重新启动网络服务器

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

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

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

配置应用程序用户

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

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

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

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

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

摘要

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值