用户与权限管理

用户和权限是Oracle数据库系统最基本的安全管理机制。

用户通过SQL*Plus或者应用程序登录Oracle时,必须提供一个胀号,即用户名和口令。
登录后还必须有一定的权限才能完成相应的操作。
用户具有什么样的权限,才能完成什么样的操作。

如果用户希望访问数据库,首先应该由数据库管理员为其分配一个账号,然后再为它指定一定的权限,这样用户才能完成相应的操作。
数据库管理员还可以通过PROFILE对用户使用口令及系统资源的情况进行控制

用户管理

用户是一个数据库对象,是一系列数据库对象和权限的统称

用户所有的操作默认在自己的模式下进行,模式是一个用户所拥有的数据库对象的集合,每个用户都有自己的模式,用户与模式之间是一一对应的,模式的名字与用户名相同。
例如, SCOTT 用户的模式为SCOTT,
在这个模式中包含了用户SCOTT拥有的所有数据库对象,包括表、视图、索引、存储程序等。
用户的数据库对象和数据分布在表空间中,每个用户都有默认的表空间。

默认的表空间在创建用户时指定,如果不指定,那么SYSTEM表空间将被指定为该用户的默认表空间。

数据库中有哪些用户

在Oracle数据库中有三类用户,一类是sysdba ,一类是sysoper ,第三类是普通用户

其中
前两类用户称之为特权用户,它们拥有对所有数据库对象的一切权限,包括数据库本身

sys 用户同时具有sysdba和sysoper两种权限,它在创建数据库时自动产生,不需要手工创建。
特权用户的口令一方面存放在数据库中,另一方面存储在口令文件中。

如果为一个普通用户指定了sysdba或sysoper权限,那么这个用户也将成为特权用户。
特权用户的信息可以从动态性能视图v$pwfile_users 中获得
一个用户只要具有这两种权限,就可以以“ as sysdba ”或者“ as sysoper”的方式登录数据库服务器。
例如:

sqlplus scott/tiger as sysdba

如果用户以“ as sysdba” 方式登录数据库服务器,那么他将成为sys 用户。

如果以“ as sysoper”的方式登录,那么他将成为PUBLIC用户。
这两种权限的范围大小是不一样的,例如,如果一个用户以“ as sysdba”方式登录,那么他可以无条件地访问任何用户的数据,例如:

sqlplus scott/tiger as sysdba

select * from userl.tl;

如果一个用户以“as sysoper”方式登录,那么他是不能访问其他用户的数据的。

在后面的内容中,将对这两种权限进行详细的比较。
普通用户一般由sys用户创建,这类用户的权限比较小,一般只限于访问自己模式中的数据库对象。

普通用户如果希望对数据库进行其他的访问,就需要具有相应的权限。

如何创建用户

数据库系统在运行的过程中,往往要根据实际需求创建用户,然后为用户指定适当的权限。
创建用户的操作一般只能由sys 用户完成,如果普通用户也要创建用户,必须具有一个系统权限,即CREATE USER
创建用户的命令是CREATE USER ,创建用户所包含的内容包括为用户指定用户名、口令、默认表空间、存储空间配额等。
其中用户名是代表用户账号的标识符,它的命名规则是:
·必须以字母开始
·长度为l ~ 30 个字符
·从第二个字符开始,可以包括大小写字母、数字、一、$和#等字符。
.大写和小写是相同的
用来创建用户的CREATE USER命令的完整语拉格式为:

CREATE USER 用户名 IDENTIFIED BY "口令"
DEFAULT TABLESPACE 表空间
TEMPORARY TABLESPACE 临时表空间
QUOTA 空间配额大小 ON 表空间
PASSWORD EXPIRE
ACCOUNT LOCK | UNLOCK

其中DEFAULT TABLESPACE用来为用户指定默认表空间,如果不指定,那么SYSTEM表空间将被指定为这个用户的默认表空间。
如果不特别指定,用户创建的表、索引等数据库对象就位于默认表空间中。
为了提高数据库的性能,同时为了方便管理数据, Oracle建议为用户指定一个默认表空间。
TEMPORARY TABLESPACE用于为用户指定临时表空间。

在一个数据库中可以创建多个临时表空间,为每个用户可以指定不同的临时表空间。
还可以把多个临时表空间组织为一个表空间组,把这个表空间组作为整个数据库或者某个用户的默认临时表空间。
QUOTA子句用于为用户在表空间上指定空间配额。

尽管为用户指定了默认表空间,但是用户在这个表空间上还不能创建数据库对象,因为它在这个表空间上没有可支配的存储空间。
空间配额以字节、KB 、MB等为单位,还可以指定为UNLIMITED ,即无限制的空间配额

如果希望用户在所有表空间上都具有无限制的空间配额,只要为其指定UNLIMITED TABLESPACES系统权限即可。
PASSWORD EXPIRE用于指定用户的口令过期,用户在第一次登录数据库服务器时必须修改自己的口令。
在创建用户账号时,用户的初始口令是由管理员指定的。

如果以口令过期的方式强迫用户修改自己的口令,这样将使用户的账号更加安全。
ACCOUNT子句用于指定用户账号的状态,如果为UNLOCK ,这个用户就能够登录数据库服务器,这是默认设置。
如果为LOCK ,则为锁定状态。
例如,下面的CREATE语句用于创建用户user1,并为其指定相关属性:

CREATE USER user1 IDENTIFIED BY "123"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users
PASSWORD EXPIRE
ACCOUNT LOCK;

如何在创建用户时没有指定QUOTA大小可以在后面添加:

例如:

alter user user1 quota 10M on users;  
alter user user1 quota unlimited on users;
grant unlimited tablespace to user1;

用户被创建之后,还没有任何权限,甚至不能登录数据库,只有当sys用户为它指定了一定的权限后,它才能对数据库进行访问。
用户的相关信息可以从数据字典视图dba_users 中获得

例如,下面的SELECT语句用于查询当前数据库中所有用户的名称、口令、默认表空间和账号状态等信息:

SELECT username, password, account_status, default_tablespace FROM dba_users WHERE username=‘USER1‘;

在列出的用户中,包括特权用户、数据库预创建的用户和刚刚手工创建的用户。

用户的口令都是经过加密的,在较早版本的数据库中,可以显示加密的口令,在现在的版本中不显示口令。
如果不特别指定,用户的默认表空间是SYSTEM表空间。

如何修改用户的信息

为了防止不法之徒盗取用户的口令,用户应该经常改变自己的口令。

用户的口令不应该是类似1234 、abed这样简单的字符串,更不要指定为自己生日和姓名,也不要指定为一个英文单词,因为这样的口令很容易被破译。
一个好的口令应该包括大小写字母、数字、_、&、%、$等各种符号在内的混合字符串
统计表明,一个口令中包含的成分越复杂,就越难破译。
修改用户口令的操作一般由用户自己完成, sys用户可以无条件修改任何一个用户的口令。
普通用户只能修改自己的口令,如果要修改其他用户的口令,必须具有ALTER ANY USER这个系统权限。
修改用户口令的命令是ALTER USER 。

修改用户口令的ALTER USER命令格式为:

ALTER USER 用户名 IDENTIFIED BY "新口令";

例如,将刚才创建的用户user1的口令改为“ book ”,对应的ALTER USER语句为:

ALTER USER user1 IDENTIFIED BY "book";

除了SQL命令ALTER USER 以外, SQL*Plus也提供了一个PASSWORD命令,可以用来修改用户的口令
利用SQL*Plus 的这条命令, sys用户可以修改其他用户的口令,普通用户可以修改自己的口令,在授权的情况下也可以修改其他用户的口令。
一个用户在修改自己的口令时,必须知道自己以前的口令
这条命令只有一个参数,就是用户名,如果默认了这个参数,就修改自己的口令。
以下是用户scott修改自己的口令的情况:

PASSWORD scott

Al,TER USER命令除了修改用户口令外.还可以修改用户的默认表空间、存储空间配额、账号状态等信息。
例如, 下面的语句用于锁定用户scott:

ALTER USER scott ACCOUNT LOCK;

下面的语句用于修改用户user1默认表空间、临时表空间,并将该用户在表空间users上的空间配额修改为无限制:

ALTER USER userl
DEFAULT TABLESPACE tsl
TEMPORARY TABLESPACE tsl
QUOTA UNLIMITED ON tsl;

如何删除用户

一个用户不再访问数据库系统时,应该将这个用户及时地从数据库中删除,否则可能会有安全隐患。
一个更好的做法是先将这个用户锁定,过一段时间如果确定这个用户不再需要,再将其删除。
删除用户的操作一般由sys用户完成,也可以由具有DROP USER权限的用户来完成。

一个用户被删除后,这个用户本身的信息,以反它所拥有的数据库对象的信息都将从数据字典中被删除。
删除用户的命令是DROP USER 。

这条命令的语法格式为:

DROP USER 用户名;

例如,要删除用户USER2,可以执行下面的DROP USER语句:

DROP USER user2;

需要注意的是,如果在一个用户的模式中已经包含一些数据库对象,那么这个用户是不能被直接删除的,在删除用户时系统将显示类似以下的信息:

ORA-01922: 必须指定 CASCADE 以删除 ‘USER1‘

出现错误信息的原因是在用户USER1的模式中包含某些数据库对象,所以不能直接删除。

如果要强制删除用户,可以在DROP USER命令中使用CASCADE选项,这样用户以及所拥有的数据库对象将一起被删除。
例如,删除用户scott可以执行下面的语句:

DROP USER user1 CASCADE;

用户的权限管理

Oracle数据库对用户的权限有着严密的规定,如果没有权限,用户将无法完成任何操作,甚至不能登录数据库

例如,刚刚创建的用户user1在试图登录数据库时,将看到以下错误信息:

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

也就是说,用户若要登录数据库,必须具有CREATE SESSION权限

用户权限有两类,即系统权限和对象权限。
系统权限主要是指对数据库对象的创建、删除、修改的权限,对数据库进行创建、备份等权限,而对象权限主要是指对数据库对象中的数据的访问权限。
系统权限一般由sys用户指定,也可以由具有特权的其他用户授予。
对象权限一般由数据库对象的所有者授予用户,也可以由sys用户指定,或者由具有该对象权限的其他用户授予。

系统权限的管理

系统权限是与数据库安全有关的最重要的权限,这类权限一般是针对数据库管理员的

系统权限的管理主要包括权限的分配、回收和查询等操作
Oracle 11g提供了200余种系统权限,下表 列出了与用户有关的最重要的几种系统权限。

对于表、视图、会话、用户、触发器这些数据库对象,有关的系统权限包括创建、删除和修改它们的权限,相关的命令分别是CREATE 、DROP和ALTER 。
表、视图、触发器、存储程序等对象是与用户有关的,在默认情况下对这些对象的操作都是在当前用户自己的模式下进行的。
如果要在其他用户的模式下操作这些类型的对象,需要具有对应的ANY权限

例如,要能够在其他用户的模式下创建表,当前用户必须具有CREATE ANY TABLE系统权限,如果希望能够在其他用户的模式下删除表,必须具有DROP ANY TABLE 系统权限等。
系统权限一般有三种授予者,一种是sys用户,即数据库管理员,这是最主要的一种授予者,大部分的系统权限管理工作都由sys用户完成。
第二种是具有特权的普通用户,普通用户一旦具有了sysdba或者sysoper特权,也可以管理系统权限。
第三种是被授予了某种系统权限的用户,系统允许它把所拥有的系统权限再授予其他用户。
为用户授予权限的GRANT命令的语法格式为:

GRANT 权限列表 TO 用户列表 WITH ADMIN OPTION;

GRANT命令执行后,所有指定用户都将获得指定的权限。

如果希望把一个权限授予所有用户,可以用PUBLIC代替所有的用户名
选项“ WITH ADMIN OPTION”的功能是使得权限的获得者可以再将权限授予其他用户。
例如,刚刚创建用户userl 时,这个用户没有任何权限。

如果把CREATE SESSION权限授予这个用户,那么这个用户就可以登录数据库了。
如果再把CREATE TABLE权限授予这个用户,那么他就可以在自己的模式中创建表了。
授予这两个权限的语句为:

GRANT CREATE SESSION, CREATE TABLE TO user1;

用户在登录数据库系统后应该可以创建表了,但是当这个用户在自己的模式中创建表时,
将遇到以下的错误:

ORA-01950: 对表空间 ‘USERS‘ 无权限

出错的原因是当前用户在他的默认表空间中没有空间配额,即没有可以使用的存储空间,所以无法创建表。
这时需要为该用户指定空间配额,或者为这个用户指定UNLIMITED TABLESPACE系统权限。
所以为了使一个用户可以操作数据库,至少应该把上述三个权限授予这个新用户。
例如, 下列的授权语句使得所有用户都可以使用无限制的磁盘空间:

GRANT UNLIMITED TABLESPACE TO PUBLIC;

如果将ALTER USER的系统权限授予某用户,那么它就可以修改其他用户的信息。

现在考察下列权限操作的语句序列 :

CONN / AS SYSDBA

GRANT ALTER USER TO user1;

CONN user1/123

ALTER USER scott IDENTIFIED BY new_tiger;

如果上述语句都执行成功,那么用户scott的口令将被修改为“new_tiger”。

首先以特权用户sys登录,并将系统权限ALTER USER授予用户userl。 
然后以用户userl 登录,这个用户就可以修改其他用户的信息了。
回收系统权限的命令是REVOKE ,这条命令一般由SYS 用户执行。

普通用户如果要回收其他用户的权限,则他必须具有“GRANT ANY PRIVILEGE”这个系统权限。
如果一个用户在接受某个系统权限时是以“ WITH ADMIN OPTION ”方式接受的,他随后又将这个系统权限授予了其他用户,那么他也可以将这个系统权限从其他用户回收。
REVOKE的语法格式为:

REVOKE 系统权限列表 FROM 用户列表;

如果要从所有用户回收某个系统权限,可以用PUBLIC代替所有的用户名

这里的系统权限也是有PUBLIC授予的。

例如,要将刚才授予用户user1的系统权限CREATE SESSION和CREATE TABLE 回收,可以执行下面的REVOKE语句:

REVOKE CREATE SESSION, CREATE TABLE FROM user1;

这样,用户USER1就不能登录数据库,更不能创建表了。

需要注意的是系统权限可以转授,但是回收时不能间接回收

假设有三个用户,第一个用户将某个系统权限以“WITH ADMIN OPTION”的方式授予第二个用户,第二个用户又将这个权限授予第三个用户,那么当第一个用户从第二个用户回收这个权限时,并不能同时从第三个用户回收这个权限,第三个用户这时仍然具有这个权限。
现在考虑下列权限操作的语句序列:

CONN AS sysdba
GRANT CREATE SESSION,CREATE TABLE TO user1 WITH ADMIN OPTION;
CREATE USER user2 IDENTIFIED BY "1234";
CONN user1/1234
GRANT CREATE SESSION,CREATE TABLE TO user2;
CONN sys/1234 AS sysdba
REVOKE CREATE SESSION,CREATE TABLE FROM user1;
CONN user2/1234
SELECT * FROM user_sys_privs

时间: 2024-10-07 20:17:52

用户与权限管理的相关文章

linux用户及权限管理

[文件管理.管道.用户及组管理.用户及权限管理]\用户及组管理 用户与组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也可以帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和各自的口令.用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录.实现用户账号的管理

第15章 mysql 用户、权限管理

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 范德兰斯.MySQL开发者SQL权威指南 [M].北京:机械工业出版社,2008 [4] Forta.MySQL必知必会 [M].北京:人民邮电出版社,2009 [5] Chapter 6 Security [6] 5.7. MySQL访问权限系统

【linux相识相知】用户及权限管理

linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管理员我对linux系统权限有哪些?作为一个普通的用户又可以对linux系统有哪些操作呢?这里就牵扯到了linux的用户类别和权限管理.本次博客就用户和权限管理作出详细的解释. 用户和组类型 在linux系统中,有着用户和组着两个概念,用户是被包含在组里面的. 用户可以分为以下2中类别: 管理员:也就

Jenkins2.32用户和权限管理策略

前言 在使用jenkins的过程中,需要为不同的角色分配相应的权限,如果jenkins的用户数据能和公司现在的帐号系统结合起来那会更好. 关于如何为用户分组,我推荐使用 role based authorization strategy 这个插件 我的环境如下: 版本:Jenkins ver. 2.32.3 系统:windows 7 x64 进入用户管理 如果使用的是jenkins内置的用户数据库,操作方法如下: 1.使用管理员帐号登录,选择 Configure Global Security 

对liunx系统中用户和权限管理一点小心得

近期才接触Liunx,给我的感觉,并不是很难,但是知识点很多,命令杂,并且附带了茫茫多的选项.接下来我就拿用户和权限管理来举个例子. 一丶用户&组的创建,管理. 用户,顾名思义,就是在系统上的接口进行操作的人. 用户分为:1.管理员(root)2.普通用户(user):系统用户和登录用户 管理员比较好理解,好比说一个国家的国王,拥有对国家最高的指挥权.root在linux系统中就扮演了国王的角色,任何的权限对它来说都形同虚设. 而普通用户,相当于这个国家的公民,必须遵循国家规定的法律. 普通用户

用户和权限管理

一:用户和组 用户分为两类:一个是管理用户,一个是普通用户, 用户类别:一类是系统用户,另一类是登录用户, 用户的标识是UID,16bit二进制数字是0-65535 管理员:0 普通用户:1-65535 3. 组:一是管理员组,二是普通用户组 4.组类别:一类是系统组,一类是登录组 用户标识GID,管理员组:0普通组:1-65535 5.从用户角度划分: 基本组:每个用户至少有一个组 附加组:同时包括在其他组中 私有组:组名同用户名,且包含一个用户 公共组 :组内包含了对个用户 6.groupa

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求为一个具体的功能页面 /// </summary> public class AdminActionMethod : Attribute { /// <summary> /// 页面请求路径 /// </summary> public string ActionUrl {

mysql 用户和权限管理

1.用户连接到 mysql,并作各种查询,对用户权你是谁限的检查1.对于 mysql 你有没有权限连接上来,必须满足下面三个参数:1.你从哪里来?:host 2.你是谁? :user 1.新增一个用户: 命令格式:grant [权限1,权限2,权限3] on *.* to [email protected] identified by password 2.查看一个用户的权限:select * from user where user=root \G; 3.回收权限:revoke [权限] on

用户的权限管理

用户的权限管理: 1, 普通权限 2,特殊权限 3,文件的特殊属性 4,FACL权限机制 普通权限: 进程安全上下文: 1,判断进程的所者是否为想要操作的文件的属主,若是,就按照属主的权限进行授权,若不是,就转到第二条. 2,判断进程的所有者是否为想要操作的文件的属主中的成员,如果是,就按照属主的权限进行授权,如果不是,转第三条. 3,按照其他用户的权限进行授权. 权限的构成: NODE:使用权 r:可读 w:可写 x:可执行 目录: r:可使用ls命令获得其中所有文件名的列表:ls-l命令来获

Centos 6,7 用户的权限管理

Centos6, 7 用户和权限管理 之所以设置用户和权限管理机制,主要是为了实现用户之间的隔离,形成独立的空间 每个用户所对应的访问权限不同,不可以越权限操作 1.  先从用户的分类开始 用户分为: 管理员:root 普通用户(又分为): 系统用户:仅用于运行服务程序: 登录用户:系统资源的正常使用者: 如果仅有用户名,而计算机又不会识别名字,只会识别数字,所以每个用户名都对应一个纯数字的 用户标识,就叫做用户ID 用户标识:UserID, UID (16bits二进制数字:0-65535:)