apache derby_Apache Derby数据库用户和权限

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 admin用户。 接下来我们来看。

运行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

apache derby

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA for Mac在MacOS模式下的版本控制/本地历史记录快捷键(VCS and Local History Shortcut)

快捷键快捷键符号英文名称功能说明Command K⌘KCommit project to VCS提交代码到版本控制器Command T⌘TUpdate project from VCS从版本控制器更新代码CommandShiftK⌘⇧KPush commits推送提交,有问题OptionCommandK⌥⌘KPush commits推送提交Control V⌃V‘VCS’…

nutshell_Nutshell中的Java 8语言功能-第1部分

nutshell你好朋友, Java 8发布已经很长时间了,现在越来越多地被使用。 在本文中,我们将讨论以下Java 8主题。 1.功能接口 2.Lambda表达式 3.默认方法 1.功能界面 什么是功能接口? 与一种并且只有一种抽象方法的接口是功能接口…

windows server 2008 R2 命令行的方式创建用户、设置密码

一、使用命令行的方式创建用户、设置密码 (1)标准格式: net user username password / add 例如:建立一个名为lijunxuan、密码为Abc_123的用户 net user lijunxuan Abc_123 /add 二、使用命令行修改旧帐户的密码 &#xff…

IntelliJ IDEA for Mac的快速切换当前主题方案(Quick switch current scheme)

文章目录一、配色方案 (Color Scheme)二、代码样式方案(Code Style Scheme)三、键映射表,即快捷键方案(Keymap)四、视图模式/查看模式/显示模式(View Mode)五、界面外观&…

jpa避免n+1_JPA技巧:避免N + 1选择问题

jpa避免n1介绍 像JPA这样的ORM框架通过帮助我们在对象<->关系数据映射期间避免了很多样板代码&#xff0c;从而简化了我们的开发过程。 但是&#xff0c;它们还给表带来了一些其他问题&#xff0c;N 1是其中之一。 在本文中&#xff0c;我们将简要介绍该问题以及避免这些…

Windows server 2008 基础知识

1、Windows server 2008 安装形式 (1、Virtual (2、Hyper-V (3、VMware 2、对于虚拟内存的大小&#xff0c;建议为实际内存的1.5倍 3、在Windows server 2008系统中安装活动目录的命令是DCPROMO。活动目录存放在域控制器中 4、Windows server 2008支持的两种用户账户&…

Paint X for Mac的用法

文章目录快捷键图形界面介绍快捷键 快捷键说明Command A抓手Command S另存为Command T设置字体Option Command C设置画布大小 Canvas SizeOption Command I设置图像大小 Image SizeShift Command V垂直翻转 Flip VerticalShift Command H水平翻转 Flip HorizontalC…

IntelliJ IDEA for Mac如何替换文件内容中指定的关键词

按下组合键 Shift R 打开替换对话框&#xff08;如下图所示&#xff09;&#xff0c;在对话框中有两个输入框&#xff0c;上面的输入框中输入被替换的关键词&#xff0c;会在指定的范围内查找被替换的关键词&#xff0c;接着在下面的输入框中输入替换的关键词&#xff0c;然后…

海域动态监视监测管理系统_监视和管理备份系统

海域动态监视监测管理系统上一次我们建立一个强大的备份系统时 &#xff0c;现在我们将研究如何监视备份集。 我们需要验证是否正确清理了备份集&#xff08;这称为删除策略&#xff09;&#xff0c;并且它们是一致的&#xff08;称为一致性策略&#xff09;。 备份集可以包含…

Thread 线程同步、线程状态

线程概念 线程&#xff08;英语&#xff1a;thread&#xff09;是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 一、多线程介绍 1.1创建线程类 Java中通过继承Thread类来创建并启动多线程的步骤如下&#xff1a; 1.定义Thr…

jsp过滤器示例_Java 8过滤器,地图,收集和流示例

jsp过滤器示例大家好&#xff0c;许多读者给我发了电子邮件&#xff0c;写了一篇有关Java 8的地图和过滤器功能的文章&#xff0c;因为他们发现它们难以理解和使用。 即使我以前同时写过有关map&#xff08;&#xff09;和filter&#xff08;&#xff09;的博客&#xff0c;我仍…

IntelliJ IDEA for Mac如何使用单元测试Junit

文章目录测试分类Junit 使用步骤测试结果的判定常用的注解BeforeAfter测试分类 黑盒测试&#xff1a;不需要写代码&#xff0c;不需要关注程序执行具体逻辑和流程&#xff0c;给输入值&#xff0c;看程序是否能够输出期望的值 白盒测试&#xff1a;需要写代码&#xff0c;需要…

File类、递归、字节流

一、File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示&#xff0c;主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) &#xff1a;通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 public File(String …

java求期望_Java 11的期望

java求期望过去的几年对Java世界一直是动荡不安的&#xff0c;在相当多的发行版中添加了各种各样的功能。 在开发人员社区中&#xff0c;人们逐渐意识到Java的开发速度不够快。 在最初的20年中&#xff0c;Java平台和Java开发工具包&#xff08;JDK&#xff09;经历了庞大&…

IntelliJ IDEA for Mac 封装字段(添加setter/getter方法)

可以利用 IDEA 对类中的字段进行封装&#xff0c;所谓“字段封装”&#xff0c;就是指通过调用方法的方式来访问字段&#xff0c;而不是直接通过“对象.字段名”的方式去访问。 例如&#xff0c;成员变量 hairColor 是一个 public 的变量&#xff0c;没有相关的 setter/getter…

JDBC预处理对象prepareStatement

JDBC预处理对象prepareStatement概述 一、SQL注入问题 SQL注入&#xff1a;用户输入的内容作为了SQL语句语法的一部分&#xff0c;改变了原有SQL真正的意义。 假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME 用户输入的用户名 AND PASSWORD 用户输的密码; 此…

bean包、entity包、mode包、domain包的区别

文章目录beanentitymodeldomain总结bean 包含的都是 JavaBean。 JavaBean 是一种 Java 语言写成的可重用组件。为写成 JavaBean&#xff0c;类必须是具体和公共的&#xff0c;并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成属性。Jav…

java修改数据历史记录_记录更新(Java数据类)

java修改数据历史记录最近几个月&#xff0c;有一些与“ Java数据类”&#xff08;又称为“记录”&#xff09;有关的更新。 正如我在“ JavaFX&#xff0c;Valhalla&#xff0c;数据类和Java的浮点更新 ”一文中简短提到的那样&#xff0c; Brian Goetz的“ Java数据类 ”“探…

idea配置Maven的本地仓库(打开新的项目时自动更新本地仓库的位置)

配置Maven的本地仓库 一、打开目录然后选择 Other Settings → Settings for New Projects 二、配置自己的文件路径和本地仓库 三、设置每次自动更新本地仓库

java导出数据透视表_使用数据库中的Java流制作数据透视表

java导出数据透视表来自数据库行和表的原始数据不能为人类读者提供太多了解。 相反&#xff0c;如果我们对数据执行某种聚合&#xff0c;则人类更有可能看到数据模式 在向我们展示之前。 数据透视表是聚合的一种特定形式&#xff0c;我们可以在其中应用排序&#xff0c;求平均…