跳转至

常用SQL

理解概念关系

SID (实例) ← 容器
  ├── 用户1 (app_user)
  ├── 用户2 (test_user)
  └── 用户3 (root)

SID是实例名,用户属于特定实例。

在现有SID(ORCLCDB)下创建新用户

-- 连接到ORCLCDB实例
sqlplus sys/your_password@192.168.222.15:1524/ORCLCDB as sysdba

-- 创建新用户
CREATE USER c##test
IDENTIFIED BY test123
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON USERS;

-- 授予权限
GRANT CONNECT, RESOURCE, CREATE SESSION TO c##test;
GRANT CREATE VIEW TO c##test;
GRANT CREATE SEQUENCE TO c##test;

-- 提交
COMMIT;

在Oracle 12c+多租户环境(CDB)中,普通用户必须以 C## 开头,或者需要连接到PDB(可插拔数据库)。

生产环境都是PDB用户,这里着重写PDB的相关sql

用户SQL

-- 查看所有 PDB
SELECT name, open_mode FROM v$pdbs;

-- 切换到指定的 PDB(例如:PDB1)
ALTER SESSION SET CONTAINER = ORCLPDB;

-- 查看所有用户
SELECT username, account_status, default_tablespace, temporary_tablespace
FROM dba_users
ORDER BY username;
-- 删除用户(保留对象)
DROP USER 用户名;
-- 删除用户及其所有对象
DROP USER TEST CASCADE;

创建用户

-- 创建开发者用户
CREATE USER TEST
IDENTIFIED BY "123456"
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;
-- 授予完整权限
GRANT CONNECT TO TEST;
GRANT RESOURCE TO TEST;
GRANT CREATE VIEW TO TEST;
GRANT CREATE SEQUENCE TO TEST;
-- DML 权限(谨慎使用)
GRANT SELECT ANY TABLE TO TEST;
GRANT INSERT ANY TABLE TO TEST;
GRANT UPDATE ANY TABLE TO TEST;
GRANT DELETE ANY TABLE TO TEST;
-- 解锁用户
ALTER USER TEST ACCOUNT UNLOCK;

赋权SQL

赋予用户增删改查EMSS_CMC下所有表的权限:

SELECT 'GRANT SELECT, INSERT, UPDATE ON ' || table_name || ' TO 目标用户;' AS sql_statement
FROM all_tables
WHERE owner = 'EMSS_CMC'
ORDER BY table_name;