一、Oracle中SYS、SYSTEM、DBSNMP、SYSMAN用户区别

SYS用户:
SYS,默认密码为CHANGE_ON_INSTALL,当创建一个数据库时,SYS用户将被默认创建并授予DBA角色,所有数据库数据字典中的基本表和视图都存储在名为SYS的方案中,这些基本表和视图对于Oracle数据库的操作时非常重要的。为了维护数据字典的真实性,SYS方案中的表只能由系统来维护,他们不能被任何用户或数据库管理员修改,而且任何用户不能在SYS方案中创建表。SYSTEM用户:
SYSTEM,默认密码为MANAGER,与SYS一样,在创建Oracle数据库时,SYSTEM用户被默认创建并被授予DBA角色,用于创建显示管理信息的表或视图,以及被各种Oracle数据库应用和工具使用的内容表或视图。DBSNMP用户:
DBSNMP是Oracle数据库中用于智能代理(Intelligent Agent)的用户,用来监控和管理数据库相关性能的用户,如果停止该用户,则无法提取相关的数据信息;SYSMAN用户:
SYSMAN是Oracle数据库中用于EM管理的用户,如果你不用该用户,也可以删除。

sys和system用户的区别
【system】用户只能用normal身份登陆em。
【sys】用户具有“SYSDBA”或者“SYSOPER”权限,登陆em也只能用这两个身份,不能用normal。 “SYSOPER”权限,即数据库操作员权限,权限包括:打开数据库服务器 关闭数据库服务器 备份数据库 恢复数据库 日志归档 会话限制
“SYSDBA”权限,即数据库管理员权限,权限包括: 打开数据库服务器 关闭数据库服务器 备份数据库 恢复数据库 日志归档 会话限制 管理功能 创建数据库
normal 、sysdba、 sysoper有什么区别

normal 是普通用户
另外两个,你考察他们所具有的权限就知道了 sysdba拥有最高的系统权限
sysoper主要用来启动、关闭数据库,sysoper 登陆后用户是 public sysdba登陆后是 sys

平时一般使用system用户远程登陆到数据库做操作

二、超管员创建测试表空间和创建测试用户

采用sys或者system等管理员创建

–创建测试表空间:

create tablespace wangwu_db01 datafile '/u01/oracle/tools/oracle11g/oradata/wangwu_db01' size 10m autoextend on;
  • 1.
  • 2.

–删除表空间 直接删除表空间以及相应的数据文件

drop tablespace wangwu_db01 including contents and datafiles
  • 1.
  • 2.

–创建用户拥有表空间wangwu_db01权限

create user wangwu identified by pass123321 default tablespace wangwu_db01 quota 3m on users;

上面的sql等同下面的sql
create user wangwu identified by pass123321 default tablespace wangwu_db01;
ALTER USER wangwu  QUOTA 3M ON users;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

–授权用户wangwu对表空间的权限

ALTER USER wangwu QUOTA UNLIMITED ON WANGWU_DB01;
或者
ALTER USER your_user_name QUOTA 100M ON WANGWU_DB01;
  • 1.
  • 2.
  • 3.
  • 4.

–wangwu账户远程登录或者本地需要授权create session权限,否则无法登录

GRANT CREATE SESSION to wangwu;
  • 1.
  • 2.

–授权用户创建表和删除表的系统权限

GRANT CREATE ANY TABLE to wangwu; 
GRANT DROP ANY TABLE TO wangwu;
  • 1.
  • 2.
  • 3.

– 收回权限

revoke DROP ANY TABLE from wangwu;
  • 1.
  • 2.

–当前用户wangwu的表级别权限

select * from user_sys_privs;
  • 1.
  • 2.

–删除用户以及用户下的数据,一般禁止删除操作,都是收回用户权限就行

drop user wangwu cascade;
  • 1.
  • 2.

二、普通用户创建测试表数据

[oracle@oracle oradata]$ sqlplus wangwu/pass123321

CREATE TABLE test01 (
    employee_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    hire_date DATE,
    salary NUMBER
);
INSERT INTO test01(employee_id, first_name, last_name, hire_date, salary)VALUES (1, 'wangwu01', 'Doe', '01-Jan-2021', 001);
INSERT INTO test01(employee_id, first_name, last_name, hire_date, salary)VALUES (2, 'wangwu02', 'Doe', '01-Jan-2021', 002);
commit;
create table test02(id number,name varchar2(255));
insert into test02 values(1,'wangwu01');
insert into test02 values(2,'wangwu02');
commit;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

–查看当前用户下所有的表

SELECT table_name FROM user_tables;

select * from test01;
select * from wangwu.test01;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

提示:此时 登录wangwu账户 可以对刚才新建的表做任何操作

三、超级管理员权限

3.1 超管员管理普通用户以及数据
–超级管理员账户登陆查看wangwu账户创建的test01表和数据,同时超级管理员可以对wangwu账户创建的表test01进行任何操作

[oracle@oracle etc]$ sqlplus / as sysdba
SQL> select * from wangwu.test01;

EMPLOYEE_ID FIRST_NAME
----------- --------------------------------------------------
LAST_NAME                                          HIRE_DATE              SALARY
-------------------------------------------------- ------------------ ----------
          1 wangwu01
Doe                                                01-JAN-21                   1

          2 wangwu02
Doe                                                01-JAN-21                   2


SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

**3.2 超管员授权wangwu创建的表test01读写权限给zhangsan **

[oracle@oracle ~]$ sqlplus / as sysdba

create user zhangsan identified by pass123321 ;
GRANT CREATE SESSION to zhangsan;
GRANT INSERT, UPDATE, select on wangwu.test01  TO zhangsan; 
--收回权限 revoke UPDATE, DELETE on test01 from zhangsan;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

3.3 登录zhangsan账户查看对表test01的权限然后给表wangwu.test01插入数据

[oracle@oracle ~]$ sqlplus zhangsan/pass123321 
select * from user_tab_privs where TABLE_NAME='TEST01';

SQL> set line 300
SQL> select * from user_tab_privs where TABLE_NAME=TEST01;

GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRA HIE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
ZHANGSAN                       WANGWU                         TEST01                         WANGWU                         UPDATE                                   NO  NO
ZHANGSAN                       WANGWU                         TEST01                         WANGWU                         SELECT                                   NO  NO
ZHANGSAN                       WANGWU                         TEST01                         WANGWU                         INSERT                                   NO  NO
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

对表写数据:

INSERT INTO wangwu.test01(employee_id, first_name, last_name, hire_date, salary)VALUES (3, 'wangwu03', 'Doe', '01-Jan-2021', 003);
commit;
SQL> set line 300
SQL> select * from wangwu.test01 where employee_id=3;

EMPLOYEE_ID FIRST_NAME                                         LAST_NAME                                          HIRE_DATE              SALARY
----------- -------------------------------------------------- -------------------------------------------------- ------------------ ----------
          3 wangwu03                                           Doe                                                01-JAN-21                   3

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

对表delete一条记录:

SQL> delete from wangwu.test01 where EMPLOYEE_ID=3;
delete from wangwu.test01 where EMPLOYEE_ID=3
                   *
ERROR at line 1:
ORA-01031: insufficient privileges


提示没权限,因为没给zhansan账户授权对表test01的delete权限
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> GRANT delete on wangwu.test01  TO zhangsan; 


[oracle@oracle ~]$ sqlplus zhangsan/pass123321 
SQL> select * from user_tab_privs where TABLE_NAME='TEST01' and PRIVILEGE='DELETE';

GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRA HIE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
ZHANGSAN                       WANGWU                         TEST01                         WANGWU                         DELETE                                   NO  NO
##再次删除数据 提示成功
SQL> delete from wangwu.test01 where EMPLOYEE_ID=3;

1 row deleted.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

3.4 登录wangwu账户查看 数据已经写入

[oracle@oracle ~]$ sqlplus wangwu/pass123321
select * from wangwu.test01 where employee_id=3;
select * from test01 where employee_id=3;
  • 1.
  • 2.
  • 3.

四、查看当前用户的系统权限和表级权限
[oracle@oracle admin]$ sqlplus wangwu/pass123321

–当前登录用户

SQL> show user;
USER is "WANGWU"
  • 1.
  • 2.
  • 3.

–当前用户wangwu的系统权限

SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
WANGWU                         CREATE SESSION                           NO
WANGWU                         CREATE ANY TABLE                         NO
WANGWU                         DROP ANY TABLE                           NO

SQL> 

其中表user_sys_privs字段ADM的意思是: 表示该用户是否可以把具有的系统权限赋予给其他用户
如果ADM字段的值为“YES”,则表示该用户可以把具有的系统权限赋予给其他用户;如果值为“NO”,则表示该用户不能把具有的系统权限赋予给其他用户‌
在Oracle数据库中,系统权限的传递是通过在授权时使用WITH ADMIN OPTION来实现的。
当用户在授权时加上WITH ADMIN OPTION,被授权的用户就可以把系统权限再赋予给其他用户。
例如使用以下SQL语句授权:GRANT ALTER ANY TABLE TO PUBLIC WITH ADMIN OPTION;这样,被授权的PUBLIC用户就可以把ALTER ANY TABLE权限再赋予给其他用户‌
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

–当前用户wangwu的表级别权限

SQL> select * from user_tab_privs; 

GRANTEE                        OWNER                          TABLE_NAME                     GRANTOR                        PRIVILEGE                                GRA HIE
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --- ---
WANGWU                         SYS                            TEST01                         SYS                            DELETE                                   NO  NO
WANGWU                         SYS                            TEST01                         SYS                            INSERT                                   NO  NO
WANGWU                         SYS                            TEST01                         SYS                            SELECT                                   NO  NO
WANGWU                         SYS                            TEST01                         SYS                            UPDATE                                   NO  NO

SQL>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

以上就是简单的举例测试分享,有理解不对之处欢迎指定,一起交流学习