详解oracle用户创建(create user)

        用户能访问数据库前必须要有获得相应授权的账号,oracle中创建一个用户并为其分配密码
很简单,但是在创建用户的同时其实还可以指定很多该用户的属性,另外还有用户的特权授予。
以便用户去执行相应的操作。当创建了一个的同时也创建了一个通的shema,shema与用户是
一一对应的关系。shema是数据库对象的逻辑容器。
在创建用户的过程中可以指定的用户属性有:
1、认证方式
2、认证密码
3、默认的永久表空间,临时表空间
4、表空间配额
5、用户账号状态(locked or unlocked)
6、密码状态(expired or not)
语法格式:
create user username
identified by password;
你可以创建仅供运用程序使用的账户,用于运用程序连接数据库,没人可以使用该账户登录
到数据库。

oracle会根据你创建数据库时候的配置自动的创建预置账户:
所有的数据库都包括管理账户:
sys            默认密码:chang_on_install
system     默认密码:manager
sysman    默认密码:chang_on_install
dbsnmp   默认密码:dbsnmp
其实并不是所有的数据库都包括,你若在使用dbca创建数据库的是,不勾选 
confiure enterprise manager 
sysman与dbsnmp就不会有了。
如果安装的时候要求安装了sample schema,还会多出一些预置账户其中常用的有:
hr               默认密码:hr
scott          默认密码:TIGER

所有的数据都包含有内部账户(internal accounts),这些自动创建的用户,使得特别的
oracle特性或者组件拥有他们自己的schema。为保证这些账户被未经授权的使用,这些
账户是lock的,密码设置为expire。

SQL> create user oracleusr     //用户名:oracleuser
  2  identified by oracle      //登陆验证密码:oracle (密码是大小写敏感的)
  3  default tablespace users  //用户的默认表空间:users
  4  quota 10m on users        //默认表空间中可以使用的空间配额:10MB
  5  temporary tablespace temp //用户使用的临时表空间
  6  password expire;          //密码状态,过期。登陆的时候要求用户修改。
User created

用户创建过程中的注意事项:
1、对temporary tablespace不能指定配额。
2、如果没有为用户指定默认表空间,将使用system表空间,强烈建议指定默认表空间。
3、默认表空间不能是undo tablespace或者temporary tablespace。
4、如果没有为用户指定默认表空间,临时表空间,用户将使用system表空作为默认表空间
与临时表空,强烈避免出现此种状况。

可以查询数据字典dba_users查询用户的信息
下面查询上面创建的用户的部分信息。
SQL> select username,user_id,account_status,default_tablespace,temporary_tablespace
  2  from dba_users
  3  where username='ORACLEUSR';
 
USERNAME                          USER_ID ACCOUNT_STATUS                   DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ---------- -------------------------------- ------------------------------ ------------------------------
ORACLEUSR                              70 EXPIRED                          USERS                          TEMP
注:dba_users中的password列已经在oracle11gR2中弃用了,取而代之的是authentication_type列。

修改用户的密码:
语法格式:
alter user user_name identified by new_password;

SQL> alter user system identified by oracle11g;
User altered
SQL> alter user oracleusr identified by oracle11g;
User altered
要注意了,oracle中给用户修改密码的时候是不需要,输入旧密码的。这是一个安全隐患。
任何用户可以给自己修改密码,但是要修改别人的密码需要取得相应的权限。
 
 
 
更改用户的密码:
除了使用alter user命令修改用户的密码以后,可以在sql*plus中使用password关键字修改
密码。
SQL> conn hr/hr
已连接。
SQL> password
更改 HR 的口令
旧口令:
新口令:
重新键入新口令:
口令已更改
SQL> conn system as sysdba
输入口令:
已连接。
SQL> password scott   //DBA可以使用password+username修改其他用户的密码。
更改 scott 的口令
新口令:
重新键入新口令:
口令已更改
在pl/sql等其他工具中该命令是无法使用的。

给用户授予create session特权,以创建会话:
SQL> conn system as sysdba
输入口令:
已连接。
SQL> grant create session to oracleusr;
授权成功。
SQL> conn oracleusr
输入口令:
已连接。
这样用户就可以创建会话登录到oracle数据库中了.

锁定用户账号,当用户登录的时候会报ORA-28000的错误:
SQL> alter user oracleusr account lock;
用户已更改。
SQL> conn oracleusr
输入口令:
ERROR:
ORA-28000: 帐户已被锁定

设置用户密码的状态:
密码过期以后用户登录的时候会提示修改密码,并报ORA-28001错误。
SQL> alter user oracleusr password expire;
用户已更改。
SQL> conn oracleusr
输入口令:
ERROR:
ORA-28001: 口令已经失效
更改 oracleusr 的口令
新口令:
重新键入新口令:
口令已更改
已连接。

删除用户账户:
SQL> create user testuser identified by oracle11g;
用户已创建。
SQL> drop user testuser;
用户已删除。
请谨慎删除用户,删除用户的同时用户对应的schema中的对象也将被删除.

用户信息的查询:
很多时候只靠查询dba_users数据字典,用户的相关信息还可以查询:
dba_ts_quotas查询用户所在永久表空的配额等信息。
其实数据库中的很多用户都不需要磁盘配额,因为他们只需要其他schema中对象的访问与操作
特权。
SQL> select tablespace_name,bytes,max_bytes
  2  from dba_ts_quotas
  3  where username='ORACLEUSR';
 
TABLESPACE_NAME                     BYTES  MAX_BYTES
------------------------------ ---------- ----------
USERS                                   0   10485760

database_properties查询有关默认临时表空间,永久表空间的设置情况。
max_bytes如果值是-1表示在对应的表空间中的磁盘配额是unlimited。

关于profile:
profile用于设置一系列的数据库资源使用限制。把profile分配给用户,用户的资源使用
被设置在profile的限制之内。使用create profile 创建profile.使用create user或
alter user给用户分配profile.

profile中的限制又分为两种:
resource_parameters:
sessions_per_user:指定用户并发的会话数。
cpu_per_session:以百分之一秒为单位,指定用户的CPU占用时间。
cpu_per_call:以百分之一秒,指定一次调用的的CPU占用时间。
connect_time:以分为单位,指定会话的持续时间。
idle_time:以分为单位,指定会话的空闲时间。
logical_reads_per_session:指定允许的logical reads 块数量。
logical_reads_per_call:指定一次调用允许的logical reads块数量。
private_sga:一个会话在SGA共享池中分配的私有会话空间的大小。
该参数只有在共享服务器模式下才有效。
composite_limit:以服务单元指定一个会话总的资源开销。oracle会根据cpu_per_session,
connect_time,logical_reads_per_session,private_sga的加权值来计算service units。

SQL> create profile new_profile1 limit  //profile名称new_profile1
  2  sessions_per_user  5               //用户的同时并发会话数5
  3  cpu_per_session   unlimited        //会话的CPU占用时间无限制
  4  cpu_per_call 6000                  //一次调用不能占用CPU的时间不能超过60秒
  5  connect_time 60                    //单个会话持续的时间不能超过60分钟
  6  logical_reads_per_session 1500     //单个会话所能允许的逻辑读块数:1500
  7  logical_reads_per_call default     //一次调用的所能允许的逻辑读块数使用默认值
  8  private_sga 10k                    //单个会话可以占用的sga的内存空间:10kb
  9  composite_limit 5000000;           //复合资源限制的数量500万服务单元。
配置文件已创建
此处没有指定idle_time,password_parameters的参数,所有点那个把new_profile1分配给用户
的时候,这些限制将使用default profile中的默认值。

给用户分配profile:
SQL> alter user oracleusr profile new_profile1;
用户已更改。
如果用户在创建的时候不指定profile,oracle会自动把default profile分配给用户.

password_parameters:
failed_login_attempts:用户账户被锁定前,用户登录的尝试次数,默认值是10次。
password_life_time:指定密码过期的时间,默认值是180天。
password_reuse_time:当前密码可以重用以前必须经过的时间间隔。
password_reuse_max:当前密码可以被重用前需要修改的次数。
以上两个参数需要一同使用。
password_lock_time:当超过failed_login_attempts指定的值时,账户被锁定的天数。默认是一天。
password_grace_time:在password_life_time到期以后宽限用户使用原密码登录的天数
如果,在password_grace_time指定的天数内,旧密码仍有效,但是会提高用户更改密码。默认是7天。
password_verify_function:指定密码复杂度验证的PL/SQL函数,或第三方运用程序。不使用
密码验证函数,password_verify_function设置为null。

SQL>  create profile new_profile2 limit
  2   failed_login_attempts 3
  3   password_life_time 90
  4   password_reuse_time 180
  5   password_reuse_max 3
  6   password_verify_function null
  7   password_lock_time 1
  8   password_grace_time 5;
配置文件已创建
SQL> alter user oracleusr profile new_profile2;
用户已更改。
注意此时前面分配给用户的new_profile1就被new_profile2取代了。
在new_profile中未指定的resource_parameters会自动使用default profile中的默认值。
所有应该把所有的资源限制写在同一个profile中。

补充上节内容:
上节中提到了oracle的预置账户:sys,system
sys与system都具有很高的权限,都被授予了dba角色。但是sys的权限要高于system,sys用户
可以执行system用户无法执行的:数据库升级、数据库备份与恢复。system用户主要用于执行
数据库的日常管理工作。
注:数据库中数据库字典包含的所有的基表与视图都存储在sys schema中。这些基表与视图
对数据库的运行十分的关键,为了保证数据字典的完整性,在sys schema中的基表只能被数据库
操作。system schema额外的用于数据库管理的表与视图。


 
 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是详细说明在 ORACLE 数据库中创建存储过程的步骤: 1. 打开 ORACLE 数据库管理工具,如 SQL Developer。 2. 在 SQL Worksheet 中输入以下代码,创建一个简单的存储过程: ``` CREATE OR REPLACE PROCEDURE my_procedure IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; ``` 这段代码的含义是: - CREATE OR REPLACE:创建或替换存储过程。 - PROCEDURE:定义的是一个存储过程。 - my_procedure:存储过程的名称。 - IS:存储过程的开始标志,表示存储过程的定义即将开始。 - BEGIN 和 END:存储过程的主体部分,包含了存储过程的逻辑代码。 - DBMS_OUTPUT.PUT_LINE:输出信息到控制台。 3. 点击运行按钮执行上述代码,如果没有错误,会在消息窗口中看到“过程已编译”的信息。 4. 接下来,我们可以测试该存储过程。在 SQL Worksheet 中输入以下代码: ``` BEGIN my_procedure; END; ``` 这段代码的含义是: - BEGIN 和 END:执行存储过程的主体部分。 - my_procedure:存储过程的名称,需要与上面创建的存储过程名称一致。 执行该代码后,可以在消息窗口中看到“Hello World!”的输出信息,这意味着我们成功地创建并执行了一个简单的存储过程。 5. 如果需要向存储过程传递参数,可以在存储过程定义中使用参数,例如: ``` CREATE OR REPLACE PROCEDURE my_procedure(p_name IN VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello ' || p_name || '!'); END; ``` 这里我们定义了一个名为 p_name 的输入参数,并在存储过程中使用了它。在执行存储过程时,需要传递一个字符串参数,例如: ``` BEGIN my_procedure('John'); END; ``` 这里我们传递了一个名为 John 的字符串参数,执行后会输出“Hello John!”的信息。 6. 如果需要返回值,可以使用 OUT 或 IN OUT 参数。例如: ``` CREATE OR REPLACE PROCEDURE my_procedure(p_id IN NUMBER, p_name OUT VARCHAR2) IS BEGIN SELECT name INTO p_name FROM my_table WHERE id = p_id; END; ``` 这里我们定义了一个名为 p_id 的输入参数和一个名为 p_name 的输出参数,并在存储过程中使用了它们。在执行存储过程时,需要传递一个数字参数,并且在执行后可以获得一个字符串类型的返回值,例如: ``` DECLARE result VARCHAR2(100); BEGIN my_procedure(1, result); DBMS_OUTPUT.PUT_LINE(result); END; ``` 这里我们传递了一个数字参数 1,并且在执行后可以获得一个名为 result 的字符串类型的返回值,最后将其输出到控制台。 这就是在 ORACLE 数据库中创建存储过程的详细说明。需要注意的是,存储过程的定义和具体实现会因为业务需求的不同而有所差异,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值