Oracle21C创建用户和表空间

Oracle21C创建用户

1. 连接数据库

在命令行使用:

sqlplus system/<password>@//<hostname>:<port>/<service_name>
# 示例
sqlplus system/123456
sqlplus / as sysdba

使用图形化工具(datgrip2019.3):

使用sys用户时连接会报错。如下所示:

The specified database user/password combination is rejected: [99999][28009] ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

这时候应该将用户名改为sys as sysdba或者sys as sysoper。也可以使用system用户登录。

2. 需要远程连接数据库

安装参考文献

工具包下载地址

3. 用户管理

3.1 创建用户

CREATE USER c##newuser1 IDENTIFIED BY 123456;

3.2 分配存储空间配额

然后,为用户在特定表空间(例如SYSTEM表空间)上设置存储空间配额。在这个例子中,用户被赋予了在SYSTEM表空间上的无限配额

ALTER USER c##newuser1 QUOTA UNLIMITED ON "SYSTEM";

3.3 赋予权限

# 为新用户授予创建视图的权限:
GRANT CREATE VIEW TO c##newuser1;
# 授予用户权限以查询任何表:
GRANT SELECT ANY TABLE TO  c##newuser1;
# 授予用户访问数据字典视图的权限:
GRANT SELECT ANY DICTIONARY TO  c##newuser1;

3.4 分配角色

授予用户DBA角色,这是一个强大的角色,包含数据库的高级管理权限。请注意,只有在完全信任用户并且用户需要广泛的数据库管理权限时,才应该授予DBA角色:

GRANT "DBA" TO c##newuser1;

设置用户的默认角色为DBA

ALTER USER c##newuser1 DEFAULT ROLE "DBA";

注意事项

  • 在为用户分配DBA角色之前,请仔细考虑是否有必要。DBA角色授予用户几乎所有的权限和访问权,可能会带来安全风险。
  • 在生产环境中,最佳实践是遵循最小权限原则,即只授予用户完成其任务所需的最少权限。
  • 在使用QUOTA UNLIMITED ON "SYSTEM"时要小心,因为SYSTEM表空间通常包含关键的系统对象。通常,用户数据应该存储在用户自己的表空间中,而不是SYSTEM表空间。
  • 在授予SELECT ANY TABLE和SELECT ANY DICTIONARY权限时也应当谨慎,因为这些权限允许用户查询数据库中的任何表和数据字典视图,可能会泄露敏感信息。

通过遵循上述步骤和建议,您可以在Oracle数据库中成功创建用户并根据需要为其分配适当的权限和角色。

4. 数据库管理

4.1 创建新的表空间

CREATE TABLESPACE test_ts
DATAFILE '/oracle/oradata/test_ts01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M
EXTENT MANAGEMENT LOCAL;

如果 /oracle/oradata路径不存在,需要在服务器先创建这个目录。

# 创建目录
mkdir -p /oracle/oradata

# 设置权限
chown oracle:oinstall /oracle/oradata
chmod 755 /oracle/oradata

4.2 创建表并添加数据

CREATE TABLE test_table1 (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50)
) TABLESPACE test_ts;

CREATE TABLE test_table2 (
  id NUMBER PRIMARY KEY,
  description VARCHAR2(100)
) TABLESPACE test_ts;

-- 向 test_table1 插入 5 条数据
BEGIN
  FOR i IN 1..5 LOOP
    INSERT INTO test_table1 (id, name) VALUES (i, 'Name ' || i);
  END LOOP;
  COMMIT;
END;
/

-- 向 test_table2 插入 5 条数据
BEGIN
  FOR i IN 1..5 LOOP
    INSERT INTO test_table2 (id, description) VALUES (i, 'Description ' || i);
  END LOOP;
  COMMIT;
END;
/

4.3 验证数据

SELECT * FROM test_table1;
SELECT * FROM test_table2;
posted @ 2024-08-23 17:20  零の守墓人  阅读(246)  评论(0)    收藏  举报