oracle创建用户ORA-01045:user lacks CREATE SESSION privilege;

时间:2024-03-04 16:22:09

conn internal/oracle

    grant user aaaa identified by aaaa;

    conn aaaa/aaaa 会报错:

    SQL>conn aaaa/aaaa 会报错:

    ERROR:

    ORA-01045: user aaaa lacks CREATE SESSION privilege; logon denied

    原因:

    用户至少需要会话的权利,否则连接也不成功;

    用户在会话的权利上,应该有其他操作的权利;

    解决方法:  1

    grant connect, resource to aaaa;

    2

    grant create session to aaaa;

    Oracle的安全

    第一:用户管理*******************************************

    用户至少需要会话的权利,否则连接也不成功;

    用户在会话的权利上,应该有其他操作的权利;

    Oracle的用户和口令不区分大小写,真是让人大跌眼镜;

    Oralce中,所有用户必须明确被授权,才可以操作;

    SQL Server中,创建的用户自动就拥有了一些权限;

    Oracle不依赖操作系统;SQL Server依赖Windows;

    MicroSoft假定大多数用户都是合法用户,采取乐观态度;

    Oracle首先假定用户都是不安全的,采取悲观态度;

    Oracle中的用户是互相隔离的,称为用户模式;

    内置用户:

    sys,网络管理员,最高权限;

    当你试图输入了用户名:sys

    密码:通用

    之后,你发现连接不上;

    而输入 用户名:system

    密码:通用

    或者  用户名:scott

    密码:tiger

    的时候都可以连接,所以你认为

    sys的权限没有system高;

    其实正是因为sys的权限高,所以你必须以

    dba的身份来登陆:sys/通用 as sysdba

    //可以使用数据字典user_users来查看当前用户管理的用户:

    select * from user_users;

    而dba_users可以查看dba管理的用户;

    system,只管理本机上的数据库

    而all_users查看所有用户,只能由dba来查看;

    ******创建用户:

    create user 用户名 identified by 口令 [externally]

    [default tablesapce 表空间名]

    [temporary tablespace 临时表空间名]

    [quota 整数 K|M|unlimited on 表空间名]

    //注意:创建用户必须有dba的权限;

    ******查询用户:

    其实就是对表user_users/dba_users/all_users进行查询,

    只不过这里不把他们叫表,叫数据字典;而且数据字典是系统

    维护的;

    *******修改用户:

    alter user.....//后面和创建一样;

    Oracle中一个实例就是一个数据库,这个数据库相当与SQL Server的全部数据库;

    Oracle的一个数据库被分为很多个表空间,每个表空间相当于SQL Server中的一个数据库;

    实例演示:

    create user student_user

    identified by student

    default tablespace users

    temporary tablespace temp

    quota 5m on users

    quota 3m on temp

    /其中,users,temp都是内置的表空间,student_user在users里有5m空间,在temp里有3m;

    新创建的用户是没有权利的:

    SQL> conn student_user/student;

    ERROR:

    ORA-01045: user STUDENT_USER lacks CREATE SESSION privilege; logon denied

    警告: 您不再连接到 ORACLE。

    *****限制用户

    锁定:alter user 用户名 account lock;

    效果:

    SQL> alter user student_user account lock;

    用户已更改。

    SQL> conn student_user/student;

    ERROR:

    ORA-28000: the account is locked

    警告: 您不再连接到 ORACLE。

    解锁:alter user 用户名 account unlock;

    口令无效:alter 用户名 password expire; 当用户创建了很多表,

    如果直接删除用户,它下面的表都将被删除,所以我们可以

    只使得它的口令无效;

    //可见,表是用户的手下,用户没了,用户创立的表,占用的空间都就没了;

    //所以,一般情况下,我们不要删除用户;

    ****删除用户:

    drop user 用户名[cascade]

    //cascade是强制删除,即使有别人正在用这个用户的表;

    //数据库管理语句是自动结束事务的,没有rollback的机会;

    第二:权限管理***********************************************

    授权:grant [系统特权名] [角色] [on 被授权操作表名] to [用户名列表]

    [public][with admin option]

    如果是dcl语句,就不用on 被授权操作表名

    grant all on student to public:把对student的所有权限授予所有用户;

    数据字典:user_sys_privs