用sysdba登录的话,最后都是使用的sys帐号SQL> conn system/111111 已连接。 SQL> show user; USER 为"SYSTEM"SQL> conn system/111111 as sysdba USER 为"SYS"所以这样的话sysdba创建的对象都在sys的schema里了。这样你normal登录的话,用system访问sys的表空间,需要带上sys.tablanem这样的方式了。
是的,往往我们在用system用户创建一个用户之后,直接grant dba to user_name
也不要给dba这个权限了,除非你确实需要这个权限一般我们都是给普通用户connect,resource这两种role的身份,connect和resource是oracle里的两种role,这两种role聚合了一定的权限。所以赋予了这样的role,你就拥有这样的权限了。你可以通过 role_sys_prvis这个数据字典表,知道具体的role的系统权限,注意这里我说到的是系统权限,在ORacle里权限有几种系统权限,角色权限,对象权限,你可以详细看看这里的知识了,或者等待我的blob文来介绍这里我们可以先示范一下查查这个connect的角色具有哪些权限通过role_sys_privs表 如下 SQL> select * from role_sys_privs where role='CONNECT';
ROLE PRIVILEGE ADMIN_OPTION ------------------------------ ---------------------------------------- ------------ CONNECT CREATE VIEW NO CONNECT CREATE TABLE NO CONNECT ALTER SESSION NO CONNECT CREATE CLUSTER NO CONNECT CREATE SESSION NO CONNECT CREATE SYNONYM NO CONNECT CREATE SEQUENCE NO CONNECT CREATE DATABASE LINK NO
主要这里的权限是create table,而不是create any table,所以只能在自己的schema里创建表还有就是,你是不是有表空间的配额的权限。这里这些问题都可能导致你有create table的权限但是还是不能创建表。
是不是oracle版本不一样,connect所赋予的权限也不一样?我用的10.2.0.1 我查出只有在resource下才有建表的权限SQL> select * from role_sys_privs where role='CONNECT';ROLE PRIVILEGE ADM ------------------------------ ---------------------------------------- --- CONNECT CREATE SESSION NOSQL> select * from role_sys_privs where role='RESOURCE';ROLE PRIVILEGE ADM ------------------------------ ---------------------------------------- --- RESOURCE CREATE SEQUENCE NO RESOURCE CREATE TRIGGER NO RESOURCE CREATE CLUSTER NO RESOURCE CREATE PROCEDURE NO RESOURCE CREATE TYPE NO RESOURCE CREATE OPERATOR NO RESOURCE CREATE TABLE NO RESOURCE CREATE INDEXTYPE NO已选择8行。
ORACLE安全手册建议我们: 一般来说“Connection + Resource + OWNER”权限就足够了。 不要随便用“grant dba to user_name”。
已连接。
SQL> show user;
USER 为"SYSTEM"SQL> conn system/111111 as sysdba
USER 为"SYS"所以这样的话sysdba创建的对象都在sys的schema里了。这样你normal登录的话,用system访问sys的表空间,需要带上sys.tablanem这样的方式了。
Resource:用户可以写procedure,trigger,package
是的,往往我们在用system用户创建一个用户之后,直接grant dba to user_name
也不要给dba这个权限了,除非你确实需要这个权限一般我们都是给普通用户connect,resource这两种role的身份,connect和resource是oracle里的两种role,这两种role聚合了一定的权限。所以赋予了这样的role,你就拥有这样的权限了。你可以通过
role_sys_prvis这个数据字典表,知道具体的role的系统权限,注意这里我说到的是系统权限,在ORacle里权限有几种系统权限,角色权限,对象权限,你可以详细看看这里的知识了,或者等待我的blob文来介绍这里我们可以先示范一下查查这个connect的角色具有哪些权限通过role_sys_privs表
如下
SQL> select * from role_sys_privs where role='CONNECT';
ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
CONNECT CREATE VIEW NO
CONNECT CREATE TABLE NO
CONNECT ALTER SESSION NO
CONNECT CREATE CLUSTER NO
CONNECT CREATE SESSION NO
CONNECT CREATE SYNONYM NO
CONNECT CREATE SEQUENCE NO
CONNECT CREATE DATABASE LINK NO
8 rows selected通过上面我们可以看到,如果你给一个用户一个connect的权限的话,实际上这个用户就具有了
CREATE VIEW
CREATE TABLE
ALTER SESSION
CREATE CLUSTER
CREATE SESSION
CREATE SYNONYM
CREATE SEQUENCE
CREATE DATABASE LINK
这样一些权限了。你有兴趣可以把role=‘CONNECT’换成RESOURCE,看看resource具有哪些系统权限。
是不是oracle版本不一样,connect所赋予的权限也不一样?我用的10.2.0.1
我查出只有在resource下才有建表的权限SQL> select * from role_sys_privs where role='CONNECT';ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
CONNECT CREATE SESSION NOSQL> select * from role_sys_privs where role='RESOURCE';ROLE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE TYPE NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE INDEXTYPE NO已选择8行。
ORACLE安全手册建议我们:
一般来说“Connection + Resource + OWNER”权限就足够了。
不要随便用“grant dba to user_name”。