oracle之sql简单操作
基于上篇文章的环境下进行操作http://www.52php.cn/article/p-agrvzdzd-uv.html oracle用户sys、system区别: sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限 system用户是管理操作员,权限也很大,具有sysoper角色,没有create database的权限 一般来说,对数据库维护,使用system用户登录就可以 sqlplus: Usage 2: sqlplus [ [<option>] [{logon | /nolog}] [<start>] ] <option> is: [-C <version>] [-L] [-M "<options>"] [-R <level>] [-S] <logon> is: {<username>[/<password>][@<connect_identifier>] | / } [AS {SYSDBA | SYSOPER | SYSASM}] [EDITION=value] oracle一个数据库就是一个单实例(创建一个数据库就是创建一个单实例,默认有那么几个用户) 连接命令 1、conn,用法:conn 用户名/密码@网络服务名 [as sysdba/sysoper] 当用特权用户身份连接时,必须带上as sysdba或者as sysoper 使用空用户登录: [oracle@oracle11g ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 15 22:31:50 2016 Copyright (c) 1982,2009,Oracle. All rights reserved. SQL> show user; USER is "" SQL> 使用system用户登录 [oracle@oracle11g ~]$ sqlplus system/redhat SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 15 19:56:40 2016 Copyright (c) 1982,Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning,OLAP,Data Mining and Real Application Testing options SQL> SQL> show user; USER is "SYSTEM" SQL> 进行切换用户到scott SQL> conn scott/redhat; ERROR: ORA-28000: the account is locked 表明用户已经被锁定了 使用系统用户进行解锁 SQL> conn system/redhat Connected. SQL> alter user scott account unlock; 该条命令进行解锁 User altered. 然后重新使用Scott用户登录 SQL> conn scott/tiger; ERROR: ORA-28001: the password has expired 告知用户scott密码过期 Changing password for scott New password: Retype new password: Password changed Connected. SQL> show user; USER is "SCOTT" 文件操作命令: 1、运行sql脚本,start /root/a.sql SQL>start /home/oracle/a.sql 2、spool将sqlplus屏幕上的输入到一个文件中 SQL>spool /home/oracle/b.sql; SQL>select * from emp; SQL>spool off; 将select * from emp查询出来的内容保存到某个文件中 &:可以替代变量,而该变量在执行时,需要用户输入 SQL>select * from emp where job='&job';这里就会输入job的一个值来替代 SQL> select * from emp where job='&job'; Enter value for job: MANAGER old 1: select * from emp where job='&job' new 1: select * from emp where job='MANAGER' EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7566 JONES MANAGER 7839 02-APR-81 2975 20 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 显示和设置环境变量: SQL> show linesize; linesize 80 SQL>set linesize 50; 创建用户 在oracle中要创建一个新的用户使用create user语句,一般是具有dba的权限才能使用 SQL> create user xiaoming identified by redhat; User created. SQL> show user; USER is "SYSTEM" 给用户修改密码,需要dba权限或者alter user的系统权限 SQL> password xiaoming Changing password for xiaoming New password: Retype new password: Password changed 或者 sql>alter user 用户名 identified by 新密码; SQL> alter user xiaoming identified by redhat; User altered. note:新创建的用户并不能马上能够登录,创建的新用户没有任何权限,所以登录不了 SQL> conn xiaoming/huang; ERROR: ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon deniedWarning: You are no longer connected to ORACLE. SQL> show user; USER is "" 删除用户: 一般以dba的身份去删除某个用户,如果用其他的用户去删除某个用户,需要具有drop user的权限 比如:drop user 用户名 [cascade] 在删除用户时,注意,如果删除的用户已经创建了表,那么就需要在删除的时候加上一个参数cascade 这个参数的意思就是删除用户以及用户创建的表 用户管理----》授权 创建的新用户是没有任何权限的,连登录都不行,需要为其制定相应的权限,赋予权限用grant命令 回收权限的命令为revoke oracle事先就有权限这个定义,有两种 1、系统权限:用户对数据库访问的相关权限(建库建表建索引登录数据库等等) create session(系统权限140个) 2、对象权限:用户对其他用户的数据对象访问操作的权限 数据对象:每个用户创建的表、视图、触发器等等(25个) oracle角色:为了授予权限方便,事先定义了一些角色,赋予了一些权限 从系统权限中选出某些权限赋予给指定的角色 connect就是其中的一个角色(包含7个权限) grant connect to xiaoming 角色也分两种: 1、自定义角色:自己定义角色 2、预定义角色:数据库已经制定好的角色(connect就是预定义角色) 角色举例: connect dba:授予dba角色就会有dba系统的所有权限 resource:可以让某个用户在表空间建表 例子: SQL> grant connect to xiaoming ; 将connect角色授予给xiaoming,并具备一些权限 Grant succeeded. 再次使用用户xiaoming登录: SQL> conn xiaoming/redhat; 这样授权之后,用户xiaoming就可以登录了 Connected. 刚创建的用户并没有任何表,新创建的用户能否创建表呢? SQL> conn xiaoming/redhat; Connected. SQL> show user; USER is "XIAOMING" SQL> create table student(id number,name varchar2(20)); create table student(id number,name varchar2(20)) * ERROR at line 1: ORA-01031: insufficient privileges 由上述报错发现,授予connect角色并不能创建表,那么在加上resource角色呢? 切换用户,并授予角色给xiaoming SQL> show user; USER is "XIAOMING" SQL> conn system/redhat; Connected. SQL> grant resource to xiaoming; Grant succeeded. 再次创建表 SQL> show user; USER is "XIAOMING" SQL> conn system/redhat; Connected. SQL> grant resource to xiaoming; Grant succeeded. SQL> conn xiaoming/redhat Connected. SQL> create table student(id number,name varchar2(20)); Table created. SQL> desc student; Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER NAME VARCHAR2(20) 可以看出表创建成功,这就是resource角色的作用 对象权限:用户对其他用户的数据对象访问操作的权限 1、select 2、insert 3、update 4、delete 5、all 6、create index等等 数据对象:每个用户创建的表、视图、触发器等等(25个) xiaoming这个用户能否查询scott用户下的某个表? SQL> select * from emp; select * from emp * ERROR at line 1: ORA-00942: table or view does not exist 可以清楚的看出不能访问scott下的表emp 该如何操作呢? 由于表emp是scott用户下面的,于是需要使用scott用户向xiaoming用户进行授权 SQL> conn scott/redhat Connected. SQL> grant select on emp to xiaoming; 使用scott用户进行授权 Grant succeeded. SQL> conn xiaoming/redhat 连接xiaoming这个用户 Connected. SQL> select * from emp; 查询表emp,但是依然失败,由于是scoot的表emp select * from emp * ERROR at line 1: ORA-00942: table or view does not exist 所以需要下面这样进行查询 SQL> select * from scott.emp; scott用户下面的表 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 收回权限revoke scott收回xiaoming有查询的权限 revoke select on emp from xiaoming; revoke收回权限,必须是原始用户对其赋予权限的那个用户收回 SQL> show user; USER is "XIAOMING" SQL> conn scott/redhat; Connected. SQL> revoke select on emp from xiaoming; Revoke succeeded. 对权限的维护: 1、如果是对象权限 希望xiaoming用户可以去查询scott的emp表,而且还希望xiaoming可以把这个权限能够给另外的用户? 利用scott用户进行如下授权 SQL> show user; USER is "SCOTT" SQL> grant select on emp to xiaoming with grant option; Grant succeeded. 然后新建一个用户,授予connect角色权限 SQL> conn system/redhat Connected. SQL> create user xiaobai identified by redhat; User created. SQL> grant connect to xiaobai; Grant succeeded. 然后使用xiaoming用户给xiaobai用户进行授权 SQL> conn xiaoming/redhat Connected. SQL> grant select on scott.emp to xiaobai; Grant succeeded. 最后使用xiaobai用户进行查询emp表 SQL> conn xiaobai/redhat Connected. SQL> select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 2、如果是系统权限 system用户给xiaoming授权,并且使用户能够授权权限给其他用户 grant connect to xiaoming with admin option; with admin option这里不同而已 使用profile管理用户口令 profile是口令限制,资源限制的命令集合,当监理数据库时,oracle会自动建立 名称为default的profile,当建立用户没有指定profile选项,那么oracle就会将default分配给用户 1、账户锁定 指定该账户登录时最多可以输入密码的次数,也可以指定用户锁定的时间,一般用dba的身份去执行该命令 例如:指定tea这个用户最多只能尝试三次登录,锁定时间为两天 创建profile文件(规则) SQL>create profile lock_account limit failed_login_attempts 3 password_lock_time 2; -----》lock_account为profile名称随便起 SQL>alter user tea profile lock_account; 给用户tea添加上profile文件约束 2、解决锁定: SQL> conn system/redhat; Connected. SQL> alter user scott account unlock; User altered. SQL> conn scott/redhat; Connected 3、终止口令 为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba身份来操作 例子:给前面创建的用户tea创建一个profile文件,要求该用户每隔10天要修改自家的登录密码 宽限为2天 ----->宽限期限表示过了10之后,提醒你还有两天时间进行修改,相当于一共12天 SQL>create profile myprofile limit password_life_time 10 password_grace_time 2; SQL>alter user tea profile myprofile; 4、口令历史 如果希望用户在修改密码时,不能使用以前使用过的密码,口令历史就是这样将口令修改的信息存放在一个数据字典中 这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时 ,就会提示用户需要重新输入密码 例子: 1、建立profile文件 SQL>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10; ---->password_reuse_time:指定口令可重用时间即10天后就可以重用(新旧密码一样,需要过10天才能使用) 2、分配给某个用户---》tea SQL>alter user tea profile password_history; 删除profile 当不需要某个profile文件时,可以删除该文件 SQL>drop profile password_history [cascade]; 用此profile约束过的用户都将失效 cascade:级联关系 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |