一、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;

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

drop tablespace wangwu_db01 including contents and datafiles

--创建用户拥有表空间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;

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

ALTER USER wangwu QUOTA UNLIMITED ON WANGWU_DB01;
或者
ALTER USER your_user_name QUOTA 100M ON WANGWU_DB01;

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

GRANT CREATE SESSION to wangwu;

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

GRANT CREATE ANY TABLE to wangwu; 
GRANT DROP ANY TABLE TO wangwu; 

-- 收回权限

revoke DROP ANY TABLE from wangwu; 

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

select * from user_sys_privs;

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

drop user wangwu cascade;

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

[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;

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

SELECT table_name FROM user_tables;

select * from test01;
select * from wangwu.test01;

提示:此时 登录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> 

**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;

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

对表写数据:

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> 

对表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权限

[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.

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

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

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

--当前登录用户

SQL> show user;
USER is "WANGWU"

--当前用户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权限再赋予给其他用户‌

--当前用户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> 

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