Docker下DB2 新建用户创建数据库流程

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值