oracle用户创建及权限设置

权限:

create session

create table

unlimited tablespace

connect

resource

dba

例:

#sqlplus /nolog

SQL> conn / as sysdba;

SQL>create user username identified by password

SQL> grant dba to username;

SQL> conn username/password

SQL> select * from user_sys_privs;

我从创建Oracle用户权限表开始,然后讲解登陆等一般性动作

一、创建

sys;//系统管理员,拥有最高权限

system;//本地管理员,次高权限

scott;//普通用户,密码默认为tiger,默认未解锁

二、登陆

sqlplus / as sysdba;//登陆sys帐户

sqlplus sys as sysdba;//同上

sqlplus scott/tiger;//登陆普通用户scott

三、管理用户

create user zhangsan;//在管理员帐户下,创建用户zhangsan

alert user scott identified by tiger;//修改密码

四,授予权限

1、默认的普通用户scott默认未解锁,不能进行那个使用,新建的用户也没有任何权限,必须授予权限

grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限

grant unlimited tablespace to zhangsan;//授予zhangsan用户使用表空间的权限

grant create table to zhangsan;//授予创建表的权限

grante drop table to zhangsan;//授予删除表的权限

grant insert table to zhangsan;//插入表的权限

grant update table to zhangsan;//修改表的权限

grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public)

2、oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权

grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限

grant drop on tablename to zhangsan;//授予删除表的权限

grant insert on tablename to zhangsan;//授予插入的权限

grant update on tablename to zhangsan;//授予修改表的权限

grant insert(id) on tablename to zhangsan;

grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update

grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限

1.create user userName identified by password;

2.grant select any table to userName; –授予查询任何表

3.grant select any dictionary to userName;–授予 查询任何字典

执行上面三步就行了,那么这个用户就只有查询权限,其他的权限都没有!!

五、撤销权限

基本语法同grant,关键字为revoke

六、查看权限

select * from user_sys_privs;//查看当前用户所有权限

select * from user_tab_privs;//查看所用用户对表的权限

七、操作表的用户的表

select * from zhangsan.tablename

八、权限传递

即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:

grant alert table on tablename to zhangsan with admin option;//关键字 with admin option

grant alert table on tablename to zhangsan with grant option;//关键字 with grant option效果和admin类似

九、角色

角色即权限的集合,可以把一个角色授予给用户

create role myrole;//创建角色

grant create session to myrole;//将创建session的权限授予myrole

grant myrole to zhangsan;//授予zhangsan用户myrole的角色

drop role myrole;删除角色

希望可以对各位有用。

Oracle数据库建立

实验名称:

Oracle数据库建立

实验目的:

1. 掌握Oracle数据库软件安装方法;

2. 熟练掌握SQL plus工具的使用;

3. 掌握手工创建和修改数据库的方法;

4. 加深理解数据库体系结构和参数信息及其查询方法。

实验内容及要求:

1. Oracle数据库软件安装;

2. SQL plus工具的使用:包括启动、连接、常用命令及SQL,报表功能等;

3. 利用SQL plus工具建立Oracle数据库及实例,要求建立SYSETM、SYSAUX、TEMP、USER、UNDO等表空间;

4. 在新建数据库中,创建新用户并为其建立专用默认表空间和临时表空间,数据文件大小自动增长,本地盘区管理方式。为新用户赋权,以新用户身份登录,建立至少一个表对象;

5. 分别利用手工命令和OEM软件两种方式查询新建数据库的信息:(1)初始化参数信息;(2)体系结构信息,包括逻辑结构、物理结构和内存结构等。

实验环境:

操作系统:Windows XP以上

数据库:Oracle 11g windows版(32位/64位)

客户端工具:SQL plus

虚拟机:VMWare Workstation V9以上(可选)

实验原理:

1. 手工创建数据库分为三步:第一步创建新的数据库实例,即实例服务;第二步:建立数据库的物理结构;第三步:创建系统表空间中的数据字典表、动态性能视图及内部存储过程

实验步骤:

1. Oracle 11g环境的搭建

(在此就不详细对Oracle 11g的安装作介绍了,在上一篇文章对此有具体操作解释)

2. 手工创建新数剧库

1. 首先要设置环境变量,创建一个数据库的实例名,例如 set oracle_sid=xukkk

2. 在home/database下创建初始化参数文件INITxukkk.ora

3.在dos环境下执行home/BIN目录下的ORADIM程序创建实例,代码如下:

>oradim -new -sid xukkk -startmode manual -pfile C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\database\\INITxukkk.ora

实例创建成功后,可以在windows的计算机管理中看到新建的服务:OracleServicexukk

4.启动SQLPlUS,以SYSDBA身份连接到ORACLE,只有SYSDBA才有权创建数据库:

>sqlplus /nolog

>sqlplus>conn / as sysdba

5.建立服务器参数文件SPFILE,ORACLE为服务器端提供了二进制初始化参数文件,是在服务器端,除此之外可以减少手工更新初始化参数文件的工作,也使得ORACLE服务器的自我调节功能得以实现。

SQL>create spfile from pfile=\’C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\database\\INITxukkk.ora\’

6.启动实例,但不加载数据库,此时仅仅创建了实例的内存结构SGA:

SQL>startup nomount

7. 建立create database建库脚本,脚本如下,将脚本建立在c盘的根目录下,建立完脚本后在dos环境下运行该脚本进行建库:

create database xukkk

USER SYS IDENTIFIED BY 87654321

USER SYSTEM IDENTIFIED BY 87654321

LOGFILE

GROUP 1 (\’C:\\app\\Administrator\\oradata\\xukkk\\redo01.log\’) size 100m,

GROUP 2 (\’C:\\app\\Administrator\\oradata\\xukkk\\redo02.log\’) size 100m,

GROUP 3 (\’C:\\app\\Administrator\\oradata\\xukkk\\redo03.log\’) size 100m

MAXINSTANCES 1

MAXLOGFILES 5

MAXLOGMEMBERS 2

MAXLOGHISTORY 100

MAXDATAFILES 100

archivelog

CHARACTER SET ZHS16GBK

NATIONAL CHARACTER SET AL16UTF16

DATAFILE \’C:\\app\\Administrator\\oradata\\xukkk\\system01.dbf\’ size 325M REUSE EXTENT MANAGEMENT LOCAL

SYSAUX DATAFILE \’C:\\app\\Administrator\\oradata\\xukkk\\sysaux01.dbf\’ SIZE 325M REUSE

DEFAULT TABLESPACE users DATAFILE \’C:\\app\\Administrator\\oradata\\xukkk\\users01.dbf\’ size 325M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED

DEFAULT TEMPORARY TABLESPACE tempts1

TEMPFILE \’C:\\app\\Administrator\\oradata\\xukkk\\temp01.dbf\’ size 32M

REUSE AUTOEXTEND ON MAXSIZE UNLIMITED

UNDO TABLESPACE undotbs DATAFILE \’C:\\app\\Administrator\\oradata\\xukkk\\undotbs01.dbf\’ size 325M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED ;

8.调用Oracle提供的脚本文件catalog.sql创建数据字典表,这个文件放在/home/RDBMS/ADMIN文件夹下面。

SQL>@C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\RDBMS\\ADMIN\\catalog.sql

9.调用Oracle提供的脚本文件catproc.sql创建内部程序包。

SQL>@C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\RDBMS\\ADMIN\\catproc.sql

1. 创建数据表空间

SQL>create tablespace newusertbs datafile \’C:\\app\\Administrator\\oradata\\xukkk\\newusertbs.dbf\’

size 32m autoextend on extent management local;

2. 创建临时表空间

SQL>create temporary tablespace newusertemptbs tempfile \’C:\\app\\Administrator\\oradata\\xukkk\\newusertemptbs.dbf\’

size 32m autoextend on extent management local;

3. 创建新用户同时设定默认表空间

SQL>create user xu identified by 87654321 default tablespace newusertbs

temporary tablespace newusertemptbs

4. 为新用户赋权,赋权后才能为该用户创建方案对象

SQL>grant connect,resource to xu

5. 测试新用户创建成功并获得了相应的权限

SQL>conn xu/87654321

SQL>create table unit(unit_no varchar(20) primary key,

unit_name varchar(100) , memo varchar(100));

SQL>select table_name from user_tables;

异常原因分析及解决办法:

1.在配置OEM时,出现下图所示问题:

解决办法:打开数据库net manager进行配置数据库的监听服务即可解决此问题

2. 当遇到问题断开与数据库的连接时要重新启动服务,或者在dos环境下用sys登录输入shutdown指令,再重新连接数据库实例

3. 当想要删除新建的数据库实例服务时可以输入如下指令:

oradim -delete -sid <sid>

4. 连接数据库时出现适配器错误。解决办法:主要是没有开启数据库服务,去控制面板的服务中打开相应的数据库服务

5. 每次关闭cmd窗口再次启动时要记得设置环境变量,连接数据库实例,打开数据库

总结和体会:

用手工创建Oracle数据库相比较于用图形界面要麻烦许多,并且在一些细节上要更加注意,这需要我们要有足够的耐心和我们对Oracle数据库操作的指令要更加熟悉,因为开始对此不熟悉走了不少弯路,出现问题就会想到从头再来,重新建库,所以花费了不少时间,虽然说现在感觉比较难或者是比较麻烦,但是当用这种方法成功创建完数据库的时候的喜悦之情要比用图形界面创建成的喜悦之情多得多。

对于在这个过程中遇到的问题要自己去寻求解决的方法,当然百度就是一个很好的途径,应该学会自我学习,并且要多与人交流,因为有的问题可能自己思考了半天也不定会发现到底是哪出现了什么问题,但是当我们与他人交流的时候说不定就是别人之前遇到过这个问题,使得我们的问题能够更快的解决,闭门造车是不可取的。

总之手工创建数据库对于我们初次接触确实感觉挺难的,但是的确是很有意思的,所以要多学习一些相关的知识,在操作上要更加注意下细节,不要怕失败。

Oracle如何创建只读用户

关注我「程序猿集锦」,获取更多分享。

  • 背景
  • 直接授予查询权限
  • 通过角色来授予查询权限
  • 同义词的使用

现在有一个用户A,想把这个用户A下面的所有的表查询权限都赋予用户X,该怎么做?同样的问题,如果有4个用户A、B、C、D,需要把这4个用户下面所有的表的只读权限赋予用户X、Y、Z三个用户,我们该怎么做?

在MySQL5.7中,可以创建用户X,然后使用grant select on A.* to X这样的方式分别把每一个库下面所有的表都给用户X授权就可以实现。在MySQL8.0版本中,有了角色role的概念,我们只要把ABCD四个库下面所有表的只读权限都赋予一个只读角色,然后把这个只读的角色再赋予XYZ三个用户就可以了。

但是在Oracle中,没有基于类似于MySQL中的schema级别的授权,只能针对每一个用户下面每一个表分别授权。下面有2种方式可以实现Oracle只读用户授权。

直接授权的方式就是把某一个用户下面的所有的数据库对象的对应权限,一一授权给指定的另外一个用户。下面我们演示一下具体的实现过程,把用户mydb下面的所有表的只读权限授权给my_ro_user用户。

以下操作都是使用system用户来执行的。

  • 创建一个只读的用my_ro_user
  • 给只读的用户授予连接权限
  • mydb下面的userinfo表的只读权限授权给my_ro_user用户

上面只是把mydb下面的一个表授权给了my_ro_user用户,如果我们需要把mydb用户下面所有的表都授权给my_ro_user该如何做呢?在Oracle中没有grant select on mydb.* to my_ro_user这样功能,只能指定每一个数据库对象的名称。可以参考如下的方式,可以循环地把mydb下面的每一张表的查询权限都授权给my_ro_user用户。

完成上面的授权操作之后,我们使用新的用户my_ro_user登录Oracle数据库之后,就可以查询到mydb用户下面的表中的数据了。

**注意:**此时在my_ro_user用户下面执行查询语句的时候,需要指定mydb这个用户名称,在所有的表前面都需要增加上mydb.这个字符串才可以查询到对应的表,不能直接执行select * from userinfo;,需要执行select * from mydb.userinfo;才可以。如果想写mydb.这个字符串就可以查询到对应的表,我们需要为my_ro_user赋予创建同义词的权限,然后再my_ro_user下面创建同义词才可以省略掉用户名称。

  • system用户给my_ro_user用户授予创建同义词的权限。
  • my_ro_user登录Oracle然后执行如下语句,将SQL语句的结果复制出来执行即可批量创建出所有的同义词。

执行完上述SQL的结果集之后,my_ro_user在查询mydb用户下面的表时,就不用在指定mydb.字符串了。

创建一个角色,然后把对某个数据库下面的表的权限授予这个角色,然后再把这个角色赋予某一个用户。这样用户就可以以某种角色去访问某一个数据库下面的表了。

具体实现方式参考如下:

  • 创建只读角色
  • 将数据库下面所有的表授权给角色

上面的方式比较麻烦,因为要对每一个表单独对角色进行授权。下面使用一个比较快的方式来解决这个授权的过程。

上面的SQL语句块中,使用到了查询某一个用户下面所有的数据库对象的查询方式,如果要查询某一个用户下面所有的数据库对象,可以通过如下的SQL语句:

  • 创建只读用户
  • 给新创建的用户授权登录的权限
  • 把只读角色授予新创建的只读用户

当我们在只读用户下面,访问其他用户下面的只读权限的表时,如果不想在SQL语句中指定其他用户名称,那么就需要在当前只读的用户下面创建一个个表的同义词,让这个同义词自动指向其他用户下面对应的表,这样在只读用户下面就可以直接使用表名称,不用在每一个表名称前面增加用户名称了。

前提是当前只读的用户,对另外一个用户下的表,是有只读的权限的,然后在当前只读用户下创建同义词才可用,否则只要同义词没有对应的访问权限,通过同义词是不能访问到对应的数据表的。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。