首页 数据库 mysql教程 ORACLE 用户、Profile 及权限

ORACLE 用户、Profile 及权限

Jun 07, 2016 pm 03:01 PM
oracle profile 创建 权限 用户 管理

用户管理 一、创建用户 :创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。 SQL Create User username Identified by password Default Tablespace tablespace Temporary Tablespace tablespace Profile profile Qu

用户管理

一、创建用户:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。

 SQL> Create User username
   Identified by password
   Default Tablespace tablespace
   Temporary Tablespace tablespace
   Profile profile
   Quota integer/unlimited on tablespace;

 例:
 SQL> Create user acc01
  identified by acc01  // 如果密码是数字,请用双引号括起来
  default tablespace account
  temporary tablespace temp
  profile default
  quota 50m on account;

 SQL> grant connect, resource to acc01;

 [*] 查询用户缺省表空间、临时表空间
 SQL> select username, default_tablespace, temporary_tablespace from dba_users;

 [*] 查询系统资源文件名:
 SQL> select * from dba_profiles;

 资源文件类似表,一旦创建就会保存在数据库中。
 SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
 SQL> create profile common limit
   failed_login_attempts 5
   idle_time 5;
  SQL> Alter user acc01 profile common;

二、修改用户:

 SQL> Alter User 用户名
   Identified 口令
   Default Tablespace tablespace
   Temporary Tablespace tablespace
   Profile profile
   Quota integer/unlimited on tablespace;
 
 1、修改口令字:Alter user acc01 identified by "12345";
 2、修改用户缺省表空间:Alter user acc01 default tablespace users;
 3、修改用户临时表空间:Alter user acc01 temporary tablespace temp_data;
 4、强制用户修改口令字:Alter user acc01 password expire;
 5、将用户加锁:Alter user acc01 account lock; // 加锁
         Alter user acc01 account unlock; // 解锁

三、删除用户
 SQL>drop user 用户名; //用户没有建任何实体
 SQL>drop user 用户名 CASCADE; // 将用户及其所建实体全部删除
 *1. 当前正连接的用户不得删除。

四、监视用户:
 1、查询用户会话信息:select username, sid, serial#, machine from v$session;
 2、删除用户会话信息:Alter system kill session 'sid, serial#';

 3、查询用户SQL语句: select user_name, sql_text from v$open_cursor;


用户Profile

一、Profile目的:


  Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。具体管理内容有:CPU的时间、I/O的使用、IDLE TIME(空闲时间)、CONNECT TIME(连接时间)、并发会话数量、口令机制等。

二、条件:

  创建profile必须要有CREATE PROFILE的系统权限。为用户指定资源限制,必须:

  1.动态地使用alter system或使用初始化参数resource_limit使资源限制生效。该改变对密码资源无效,密码资源总是可用。 
    SQL> show parameter resource_limit
    SQL> alter system set resource_limit=true; 
  2.使用create profile创建一个定义对数据库资源进行限制的profile。
  3.使用create user 或alter user命令把profile分配给用户。

三、查看系统的默认PROFILE

  1、通过dba_profiles视图查看一下系统中默认都有哪些PROFILE
  数据库创建以后,系统中只会存在一个名为DEFAULT的默认PROFILE,在用户创建之后,如果不做特殊指定,每个用户的PROFILE都会默认的使用个默认的PROFILE。
  sys@oral> select distinct profile from dba_profiles;

  2、全面查看这个 PROFILE 包含哪些限制定义
  sys@oral> col PROFILE for a12
  sys@oral> col RESOURCE_NAME for a25
  sys@oral> col LIMIT for a15
  sys@oral> select * from dba_profiles order by 1,2;

  3、结论:DEFAULT PROFILE 只对密码的错误尝试次数做了限制(最多可以错误输错10次密码)。如想改变限制条件,有两种方法:第一种方法是对默认的PROFILE做个性化调整;第二种方法是重新定制一个新的PROFILE。

四、创建 profile 的语法如下:

  CREATE PROFILE profile
  LIMIT { resource_parameters 对资源的限制
    | password_parameters   对密码的限制
    }... ;

   
  {{ SESSIONS_PER_USER   每个用户名并行会话数
   | CPU_PER_SESSION    每会话可用的CPU时间,单位0.01秒
   | CPU_PER_CALL     一次SQL调用(解析、执行和获取)允许的CPU时间
   | CONNECT_TIME     会话连接时间(分钟)
   | IDLE_TIME       会话空闲时间(分钟),超出将断开
   | LOGICAL_READS_PER_SESSION
   | LOGICAL_READS_PER_CALL
   | COMPOSITE_LIMIT   “组合打法”
   }
   { integer | UNLIMITED | DEFAULT }
   | PRIVATE_SGA
   { integer [ K | M ] | UNLIMITED | DEFAULT }
  }

  
  {{ FAILED_LOGIN_ATTEMPTS 被锁定前的试错次数
   | PASSWORD_LIFE_TIME   密码使用天数,默认180天
   | PASSWORD_REUSE_TIME   密码可重用的间隔时间(结合PASSWORD_REUSE_MAX)
   | PASSWORD_REUSE_MAX   密码最大改变次数(结合PASSWORD_REUSE_TIME)
   | PASSWORD_LOCK_TIME   超过试错次数后,被锁定的天数,默认1天
   | PASSWORD_GRACE_TIME   密码过期后还可使用原密码的天数
   }
   { expr | UNLIMITED | DEFAULT }
   | PASSWORD_VERIFY_FUNCTION
     { function | NULL | DEFAULT }
  }

五、部分解释:

  profile:配置文件的名称。Oracle数据库以以下方式强迫资源限制:
  1.如果用户超过了connect_time或idle_time的会话资源限制,数据库就回滚当前事务,并结束会话。用户再次执行命令,数据库则返回一个错误
  2.如果用户试图执行超过其他的会话资源限制的操作,数据库放弃操作,回滚当前事务并立即返回错误。用户之后可以提交或回滚当前事务,必须结束会话。 
  提示:可以将一条分成多个段,如1小时(1/24天)来限制时间,可以为用户指定资源限制,但是数据库只有在参数生效后才会执行限制。 

  Unlimited:分配该profile的用户对资源使用无限制,当使用密码参数时,unlimited意味着没有对参数加限制。 
  Default:指定为default意味着忽略对profile中的一些资源限制,Default profile初始定义对资源不限制,可以通过alter profile命令来改变。 

  Resource_parameter部分

  Logical_reads_per_session:每会话允许读的数据块的数目,包括从内存和磁盘读的所有数据块。 
  Logical_read_per_call:一次执行SQL(解析、执行和提取)调用允许读的数据块最大数目。
  Private_sga:指定一个会话可以在共享池(SGA)中所允许分配的最大空间,以字节为单位。(该限制只在使用共享服务器结构时才有效,会话在SGA中的私有空间包括私有的SQL和PL/SQL,但不包括共享的SQL和PL/SQL)。
  Composite_limit:指定一个会话的总的资源消耗,以service units单位表示。Oracle数据库以有利的方式计算cpu_per_session,connect_time,logical_reads_per_session和private-sga总的service units

  Password_parameter部分:

  Password_life_time:指定同一密码所允许使用的天数。如果同时指定了password_grace_time参数,如果在grace period内没有改变密码,则密码会失效,连接数据库被拒绝。如果没有设置password_grace_time参数,默认值unlimited将引发一个数据库警告,但是允许用户继续连接。

  Password_reuse_time和password_reuse_max:这两个参数必须互相关联设置,password_reuse_time指定了密码不能重用前的天数,而password_reuse_max则指定了当前密码被重用之前密码改变的次数。两个参数都必须被设置为整数。
  1.如果为这两个参数指定了整数,则用户不能重用密码直到密码被改变了password_reuse_max指定的次数以后在password_reuse_time指定的时间内。
  如:password_reuse_time=30,password_reuse_max=10,用户可以在30天以后重用该密码,要求密码必须被改变超过10次。 
  2.如果指定了其中的一个为整数,而另一个为unlimited,则用户永远不能重用一个密码。
  3.如果指定了其中的一个为default,Oracle数据库使用定义在profile中的默认值,默认情况下,所有的参数在profile中都被设置为unlimited,如果没有改变profile默认值,数据库对该值总是默认为unlimited。
  4.如果两个参数都设置为unlimited,则数据库忽略他们。

  Password_grace_time:指定宽限天数,数据库发出警告到登陆失效前的天数。如果数据库密码在这中间没有被修改,则过期会失效。
  Password_verify_function:该字段允许将复杂的PL/SQL密码验证脚本做为参数传递到create profile语句。Oracle数据库提供了一个默认的脚本,但是自己可以创建自己的验证规则或使用第三方软件验证。 对Function名称,指定的是密码验证规则的名称,指定为Null则意味着不使用密码验证功能。如果为密码参数指定表达式,则该表达式可以是任意格式,除了数据库标量子查询。 

六、尝试创建一个混合型的PROFILE(包含资源限制和密码限制):
  
  sys@oral> CREATE PROFILE sec_profile LIMIT
  2     SESSIONS_PER_USER          UNLIMITED
  3     CPU_PER_SESSION            UNLIMITED
  4     CPU_PER_CALL               6000
  5     CONNECT_TIME               60
  6     LOGICAL_READS_PER_SESSION  DEFAULT
  7     LOGICAL_READS_PER_CALL     6000
  8     COMPOSITE_LIMIT            6000000
  9     PRIVATE_SGA                66K
  10    FAILED_LOGIN_ATTEMPTS      6
  11    PASSWORD_LIFE_TIME         60
  12    PASSWORD_REUSE_TIME        60
  13    PASSWORD_REUSE_MAX         5
  14    PASSWORD_LOCK_TIME         1/24
  15    PASSWORD_GRACE_TIME        10
  16    PASSWORD_VERIFY_FUNCTION   verify_function
  17  /
  CREATE PROFILE sec_profile LIMIT
  *
  ERROR at line 1:
  ORA-07443: function VERIFY_FUNCTION not found

  出错原因:VERIFY_FUNCTION函数不存在,要事先创建该函数,VERIFY_FUNCTION函数是通过utlpwdmg.sql脚本创建的,该脚本所在的目录是$ORACLE_HOME/rdbms/admin/

  使用utlpwdmg.sql脚本创建 VERIFY_FUNCTION 密码复杂度校验函数:
  sys@oral> @?/rdbms/admin/utlpwdmg.sql
  Function created.
  Profile altered.

  脚本中,verify_function 函数的密码复杂性校验规则如下:
  1)密码最小长度为4个字符
  2)密码不能和用户名相同
  3)密码要包含至少一个字符、一个数字和一个特殊字符
  4)密码需要至少有3个字符与之前的口令不相同

  实验中使用了几乎所有参数,惟一没有包含的是IDLE_TIME,它将继承 DEFALT 中的定义
  对上面创建的PROFILE逐行做一下诠释,以便加深理解:
  第 2行:对用户的并发连接会话数不做限制
  第 3行:对于连接到用户的每一个session的CPU时间的使用不做限制
  第 4行:一次调用消耗的CPU时间不能超过60秒(不超过一分钟)
  第 5行:连接到用户的每次会话时间不能超过60分钟(不超过一个小时)
  第 6行:一次会话使用的物理读与逻辑读数据块总量与DEFAULT profile中定义保持一致
  第 7行:一次调用使用的物理读与逻辑读数据块总量不超过6000个数据块
  第 8行:一次会话总的资源消耗不超过6000000个服务单元(service units)
  第 9行:一次会话在SGA中不能分配超过66K的空间
  第10行:帐户被锁定之前允许6次的错误尝试
  第11行:超过此生命周期后密码作废
  第12行:密码重用时间60天
  第13行:密码重用之前密码需要完成5次改变
  第14行:超过错误尝试次数后,用户将被锁定1小时
  第15行:当密码过期之后原密码还可以使用10天
  第16行:使用密码复杂度校验函数verify_function对密码做检查

  第12行和第13行,两个策略搭配使用后,只有完成 5 次密码修改且已超过60天后,之前的密码才能被再次使用

  删除 PROFILE 很简单,语法:DROP PROFILE profile [CASCADE];
  如果创建的PROFILE已经授权给了具体的用户,则需用CASCADE选项级联的收回相应限制,在收回这些限制信息后将以系统默认的PROFILE对该用户进行限制。

七、PROFILE 何时生效

  PROFILE中有关密码的限制永远生效,不受限制。
  PROFILE中有关资源的限制与resource_limit参数的设置有关,为TRUE时生效,为FALSE时(默认)无效。

八、将配置文件分配给用户:
  SQL> alter user dinya profile sec_profile;
  SQL> alter user dinya profile default;
  SQL> select USERNAME,PROFILE from dba_users where USERNAME = 'dinya';

九、11g oracle 用户密码过期问题

  11g之前版本,默认用户没有密码过期限制,在Oracle 11g 中默认 profile 密码过期时间是180天

  检查:select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
  过期的密码可用 alter user userXXX identified by xxx; 解决,可修改为和以前一样

  如果想设置密码不过期,可用管理员登陆,执行下面命令:
  ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

  其他相关参数:
  select * from dba_profiles where profile='DEFAULT' and RESOURCE_NAME like 'PASSWORD%';


用户权限

一、权限分类:
 系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
 实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

二、系统权限管理:

1、系统权限分类:
 DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
 RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
 CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

 对于普通用户:授予connect, resource权限。
 对于DBA管理用户:授予connect,resource, dba权限。

2、系统权限授权命令:
 [系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
 授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
 [普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]

 例:
 SQL> connect system/manager
 SQL> Create user user50 identified by user50;
 SQL> grant connect, resource to user50;

 查询用户拥有哪里权限:
 SQL> select * from dba_role_privs; --where grantee='SYS'; 
 SQL> select * from dba_sys_privs;
 SQL> select * from role_sys_privs; --where role='DBA';

 删除用户:SQL> drop user 用户名 cascade; //加上cascade则将用户连同其创建的东西全部删除

3、系统权限传递:
 增加WITH ADMIN OPTION选项,则得到的权限可以传递。
 SQL> grant connect, resorce to user50 with admin option; //可以传递所获权限。

4、系统权限回收:系统权限只能由DBA用户回收
 命令:SQL> Revoke connect, resource from user50;

 系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;
 系统权限可以跨用户回收,即A可以直接收回C用户的权限。

三、实体权限管理

1、实体权限分类:select, update, insert, alter, index, delete, all //all包括所有权限
         execute //执行存储过程权限
 user01:
 SQL> grant select, update, insert on product to user02;
 SQL> grant all on product to user02;

 user02:
 SQL> select * from user01.product;
 // 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。

3. 将表的操作权限授予全体用户:
 SQL> grant all on product to public; // public表示是所有的用户,这里的all权限不包括drop。

 [实体权限数据字典]:
 SQL> select owner, table_name from all_tables; // 用户可以查询的表
 SQL> select table_name from user_tables; // 用户创建的表
 SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
 SQL> select grantee, owner, table_name, privilege from user_tab_privs;  // 授出权限的表(授出的权限)

4. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
 DBA用户:
 SQL> Create table stud02.product(
  id number(10),
  name varchar2(20));
 SQL> drop table stud02.emp;
 SQL> create table stud02.employee
  as
  select * from scott.emp;
 
5. 实体权限传递(with grant option):
 user01:
 SQL> grant select, update on product to user02 with grant option; // user02得到权限,并可以传递。

6. 实体权限回收:
 user01:
 SQL>Revoke select, update on product from user02; //传递的权限将全部丢失。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle如何使用存储过程 oracle如何使用存储过程 Apr 11, 2025 pm 07:03 PM

存储过程是一组可存储在数据库中的 SQL 语句,可作为独立单元重复调用。它们可以接受参数(IN、OUT、INOUT),并提供代码重用、安全性、性能和模块化的优势。示例:创建存储过程 calculate_sum 来计算两个数字的总和并将其存储在 OUT 参数中。

oracle数据库如何导入 oracle数据库如何导入 Apr 11, 2025 pm 08:06 PM

数据导入方法:1. 使用 SQLLoader 实用程序:准备数据文件、创建控制文件、运行 SQLLoader;2. 使用 IMP/EXP 工具:导出数据、导入数据。提示:1. 大数据集推荐 SQL*Loader;2. 目标表应存在,列定义匹配;3. 导入后需验证数据完整性。

oracle如何配置环境变量 oracle如何配置环境变量 Apr 11, 2025 pm 07:18 PM

Oracle 环境变量配置指南:创建 ORACLE_HOME 环境变量,指向 Oracle 主目录。将 Oracle 二进制文件目录添加到 PATH 环境变量。设置 TNS_ADMIN 环境变量(如果使用 TNS 命名文件)。验证环境变量设置,确保输出显示已设置的变量。

oracle如何增加表字段 oracle如何增加表字段 Apr 11, 2025 pm 07:30 PM

使用 ALTER TABLE 语句,具体语法如下:ALTER TABLE table_name ADD column_name data_type [constraint-clause]。其中:table_name 为表名,column_name 为字段名,data_type 为数据类型,constraint-clause 为可选的约束。示例:ALTER TABLE employees ADD email VARCHAR2(100) 为 employees 表添加 email 字段。

oracle如何创建主键约束 oracle如何创建主键约束 Apr 11, 2025 pm 07:15 PM

主键是唯一标识表中每一行的特殊列或列组合,它确保表中的记录都是独一无二的,可以通过以下步骤创建:使用 ALTER TABLE 语句指定表名。添加 PRIMARY KEY 关键字后跟要指定为主键的列名。主键约束有助于确保数据唯一性、提高查询速度、防止重复记录并简化表连接。

oracle中乱码怎么解决 oracle中乱码怎么解决 Apr 11, 2025 pm 10:09 PM

Oracle 乱码问题可以通过以下步骤解决:检查数据库字符集以确保与数据相匹配。设置客户端字符集以与数据库相匹配。转换数据或修改列字符集以匹配数据库字符集。使用 Unicode 字符集,并避免多字节字符集。检查数据库和客户端的语言设置是否正确。

oracle如何去重查询 oracle如何去重查询 Apr 11, 2025 pm 07:33 PM

Oracle 提供多种去重查询方法:DISTINCT 关键字返回每列的唯一值。GROUP BY 子句对结果分组并返回每个分组的非重复值。UNIQUE 关键字用于创建仅包含唯一行的索引,查询该索引将自动去重。ROW_NUMBER() 函数分配唯一数字并过滤出仅包含第 1 行的结果。MIN() 或 MAX() 函数可返回数字列的非重复值。INTERSECT 运算符返回两个结果集的公共值(无重复项)。

oracle如何查表空间大小 oracle如何查表空间大小 Apr 11, 2025 pm 08:15 PM

要查询 Oracle 表空间大小,请遵循以下步骤:确定表空间名称,方法是运行查询:SELECT tablespace_name FROM dba_tablespaces;查询表空间大小,方法是运行查询:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

See all articles