DB2下:
DB2没有数据库级别的用户,只能使用操作系统级别的用户;**
所以要新建DB2用户,要先在数据库服务器上新建操作系统用户。
一个instance下可以有多个database,一个database下可以有多个schema,1个schema可以被多个user使用。
MySQL下:
一个instance下只有一个database,一个database下可以有多个schema,1个schema可以被多个user使用。
需求:
需要在db2数据库上
-
创建用户
-
只授予schema相关操作权限,instance权限不给,其他schema操作权限不给。
实现思路:
- root用户下创建schema用户
- 实例用户下在实例中创建database,连接该database,在database中创建schema 并绑定schema用户,实现对schema用户、schema、database的绑定
- 授予schema用户对database和该schema的操作权限
0.准备工作
①「启动容器 - 并挂载 - 并启动db2数据库服务器一直后台运行」
docker run -itd --name DB2ExpressC --privileged=true -p 50000:50000 -e DB2INST1_PASSWORD=db2inst1 -e LICENSE=accept -v /db2/database:/database imageId bin/bash db2start
db2inst1用户所在目录:/database/config/db2inst1:/bin/bash
②「修改root密码为123456,并以root用户进入容器」
passwd
docker exec -it containerId bin/bash -c "su - root"
③「配置SSH连接Docker容器」
④「创建数据库实例」
<1> 切换至DBA权限的用户,创建实例
DBA权限的用户:创建数据库的实例用户,一般名称为db2inst1 / da2ads【待定】
su - db2inst1
-- db2admin start
-- db2 start
-- db2sampl -- 安装默认实例,可不装
-- db2 connect to sample -- 连接默认的数据库实例
<2>创建自己的数据库实例
db2 create database CICDDB using codeset UTF-8 territory CN
「常用命令」
db2 list db directory -- 列出所有数据库
db2 list active databases -- 列出所有激活的数据库
db2 get db cfg -- 列出所有数据库配置
db2 "select SCHEMANAME,OWNER from syscat.schemata where schemaname='schemaName'" -- 查看
db2 select current schema from sysibm.sysdummy1 -- 查看当前数据库默认的schema
db2 SELECT CURRENT USER FROM SYSIBM.SYSDUMMY1 -- 查看当前数据库默认的user
db2 list tables for all -- 列出当前数据库下所有的表
db2 list tables for schema testSchema -- 列出当前数据库中schema为testSchema的表
db2 list tablespaces show detail -- 显示数据库空间使用情况
exit -- 退出默认用户 db2inst1
exit -- 退出容器
SSH连接docker容器
1.root用户下新增加用户组和用户
(1)添加用户
useradd -g users -d /home/testUser -m testUser
useadd命令
useradd [option] username
[option]:
-d<登入目录> 指定用户登入时的目录。
-g<群组> 初始群组。
-G<群组> 非初始群组。
-m 自动创建用户的家目录。
-M 不要创建用户的家目录。
-N 不要创建以用户名称为名的群组。
-s 指定用户登入后所使用的shell。
(2)修改用户密码
passwd testUser
-- 设置密码为yeepay.com
(3)配置/home/testUser/.bashrc,解决DB2 新增加的用户不能直接使用db2命令
-
-
$ cd /home/testUser
-
$ vi .bashrc
-
# The following three lines have been added by UDB DB2. if [ -f /database/config/db2inst1/sqllib/db2profile ]; then . /database/config/db2inst1/sqllib/db2profile fi
-
$ source .bashrc
-
2.数据库管理员用户:连接(激活)已创建的某数据库实例
su - db2inst1
db2 connect to CICDDB
3.数据库管理员用户:授予新建用户操作数据库的相关权限
新建用户是没有操作数据库的权限的,需要特意授权
db2 GRANT DBADM ON DATABASE TO USER testUser;
db2 GRANT ALTERIN ON SCHEMA testSchema TO USER testUser;
db2 GRANT CREATEIN ON SCHEMA testSchema TO USER testUser;
db2 GRANT DROPIN ON SCHEMA testSchema TO USER testUser;
「1」授予用户访问数据库的权限
CONNECT: 用户可以连接数据库
CREATETAB: 用户可以在数据库中创建表
LOAD: 用户可以将数据装载进表中
BINDADD: 用户可以使用 BIND 命令在数据库中创建包
CREATE_NOT_FENCED: 用户可以创建 unfenced 用户定义函数(UDF)
IMPLICIT_SCHEMA: 用户可以在数据库中隐式地创建模式,而不需要使用 CREATE SCHEMA 命令
CREATE_EXTERNAL_ROUTINE: 用户可以创建供应用程序和数据库的其他用户使用的过程
SECADM:安全性管理员
DBADM:DBADM 用户对一个数据库有几乎完全的控制能力。DBADM 用户不能执行某些维护或管理任务「2」授予用户访问表空间的权限
GRANT USE OF TABLESPACE GD_MAIN_TBS TO USER testUser;
GRANT USE OF TABLESPACE GD_IDX_TBS TO USER testUser;「3」授予用户操作模式的权限
GRANT ALTERIN ON SCHEMA testSchema TO USER testUser;
GRANT CREATEIN ON SCHEMA testSchema TO USER testUser;
GRANT DROPIN ON SCHEMA testSchema TO USER testUser;「4」授予用户读取表权限
GRANT SELECT ON TABLE ECGD.CL_COMMODITY TO USER testUser;
4.数据库管理员用户:为该用户创建schema
db2 create schema testSchema AUTHORIZATION testUser
5.切换到该用户:设置创建的schema为current schema
su - testUser
-- db2 connect to testSchema user testUser using yeepay.com 【出错:Expected tokens may include: "<database-alias>". SQLSTATE=42601】
db2 set current schema testSchema
开发中,可以通过修改连接字符串来修改默认连接的Schema/Sqlid,
以JDBC为例(最后的分号一定不能省略):
jdbc:db2://database_server_uri:port/database_name:currentSchema=schema_name;
6、flyway执行建表和初始化数据
7、自己写的JDBC工具类
package cn.timetell.test;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
import java.sql.*;
/**
* 数据库连接工具
*/
public class DB2ConnectionUtil {
public static void executeCreate(String url,String user,String password,String sql){
Statement stmt = null;
Connection conn = null