设为首页 收藏本站
查看: 2151|回复: 0

[经验分享] oracle之sql简单操作

[复制链接]

尚未签到

发表于 2018-9-7 11:57:11 | 显示全部楼层 |阅读模式
  基于上篇文章的环境下进行操作http://huangsir007.blog.51cto.com/6159353/1854392
  oracle用户sys、system区别:
  sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限
  system用户是管理操作员,权限也很大,具有sysoper角色,没有create database的权限
  一般来说,对数据库维护,使用system用户登录就可以
  sqlplus:
  Usage 2: sqlplus [ [] [{logon | /nolog}] [] ]
   is: [-C ] [-L] [-M ""] [-R ] [-S]
   is: {[/][@] | / }
  [AS {SYSDBA | SYSOPER | SYSASM}] [EDITION=value]
  oracle一个数据库就是一个单实例(创建一个数据库就是创建一个单实例,默认有那么几个用户)
  连接命令
  1、conn,用法:conn 用户名/密码@网络服务名 [as sysdba/sysoper]
  当用特权用户身份连接时,必须带上as sysdba或者as sysoper
  使用空用户登录:
  [oracle@oracle11g ~]$ sqlplus /nolog

  SQL*Plus:>  Copyright (c) 1982, 2009, Oracle.  All rights reserved.
  SQL> show user;
  USER is ""
  SQL>
  使用system用户登录
  [oracle@oracle11g ~]$ sqlplus system/redhat

  SQL*Plus:>  Copyright (c) 1982, 2009, Oracle.  All rights reserved.
  Connected to:

  Oracle Database 11g Enterprise Edition>  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>>
  User>  然后重新使用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>  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 用户名>
  SQL>>
  User>  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>  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>>
  User>  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:级联关系


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-566028-1-1.html 上篇帖子: oracle之检查点(Checkpoint) 下篇帖子: Mysql与Oracle的分页查询比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表