本文是我自己翻译并总结自《Expert Oracle Database 11g Administration》,没写完!
数据库安全同样要依赖于系统和网络安全。
system and object privileges
Oracle profiles:let you set limits on the resources used by each user in the database and enforce a password policy for security purposes.
Oracle Resource Manager:enables you to allocate scarce database and server resources among groups of users according to a resource plan.
虽然通过grants和privileges来控制数据库访问相当常见,但你必须还要考虑使用Oracle的强大的细粒度的访问控制特性,叫virtual private database,它能够
让你控制行级别的访问。
在一个产品数据库中,审计数据库的使用情况是个好主意。对数据和数据库时间的改动,你都可以审计,例如登录到数据库失败了。基于系统事件的触发器可以为
数据库提供一个强大的安全层。我们还会介绍Oracle的细粒度的审计策略。
数据加密:Oracle提供了加密数据的几种方法。包括特殊的PL/SQL加密包,加密表格列,加密整个表空间。
========管理用户
how to make sure that the default passwords associated with various database users are changed soon after creating a new database。
当你创建一个新数据库时,起初的几个用户将成为应用或schema owners。之后,你要创建一些使用数据库做日常工作的用户。
==========临时、默认表空间
所有的用户都要有一个临时表空间,此表空间在用户执行数据排序时用到。另外,还需要有一个默认表空间,如果用户的对象在创建时没有显式赋予一个表空间的话,
就会用此默认表空间。在数据库创建过程中,你可以为所有用户创建一个默认的临时表空间和一个默认的永久表空间,一旦你创建了这2个表空间,当你创建一个
新的用户时,就不需要再次指定它们了。
注意:如果你没有将一个表空间指定为默认表空间的话,System表空间就变成了你的默认表空间,如果一个用户创建了一个非常大的对象在System表空间里,那么
这个用户可能就占据了System表空间的所有容量,这样就使得sys超级用户不能在System表空间里创建任何对象了,导致数据库停住了,这就是为什么要给每个用户
创建一个默认的表空间的主要原因。
==========创建一个新用户
SQL> create user fanjg identified by admin123;
创建完一个数据库后,你可以用alter tablespace default temporary tablespace来设置一个默认临时表空间。查询database_properties视图可以看到当前的
默认表空间。
下面的查询显示了此新用户的默认(永久)表空间和临时表空间:
SQL> select default_tablespace, temporary_tablespace from dba_users where username='FANJG';
新用户不能连数据库,因为没有create session系统权限,所以:
SQL> grant create session to fanjg;
新用户登录后,还是不能创建对象的,假如USERS表空间是这个新用户的默认永久表空间的话,那么实际上此时用户在此表空间上是没有空间份额的。所以,需要:
SQL> alter user FANJG quote 100M on users;
如果你根本不想一个用户在数据库中创建任何对象,那么你可以不给此用户在任何表空间上的份额就行了。如果一个用户它已经在一个表空间上有份额了,那么你
只要用alter user命令将份额设置为0就行了,由该用户已经创建的对象将会保留,但该用户不能再创建新对象了,那些已有的对象当然也不能再增长了。
一旦新用户在一个表空间上被赋予了一定的空间份额,该用户就可以创建数据库对象了。
如果你想要某个用户在所有的表空间上拥有无限的空间使用权利的话,给这个用户unlimited tablespace权限就行了。
SQL> grant unlimited tablespace to FANJG;
如果你想要一个用户能创建他自己的表空间,那就用此命令:grant create tablespace to username。类似的,你必须授予它drop tablespace权限。
SQL> select tablespace_name, username, bytes from dba_ts_quotas;
SQL> create user fanjg identified by admin123
temporary tablespace TEMPTBS01
default tablespace users
quote 500M on users;
==========修改一个用户
SQL> show user
SQL> alter user FANJG identified by admin123;
只有DBA或你给了alter user权限的用户才能够用alter user命令修改密码。如果一个用户要修改它自己的密码,那么可以在SQL*Plus中运行password命令。
不管是用户自己设置了密码还是DBA给它设置了密码,DBA都无法够知晓任何用户的密码,因为是加密的。然而,后面我会介绍如何通过利用加密的密码来登录为
另一个用户。
==========删除一个用户
SQL> drop user FANJG;
这只会删除用户,该用户所拥有的对象会保持原封不动。如果数据库里的其他对象依赖此用户的话,用此简单命令是不行的,必须用到cascade,这会删掉用户、
用户的schema对象,以及任何依赖对象。
在第16章,你将学习Oracle新的Recycle Bin,它可以在你发出drop table命令时让数据库不会永久地删除这张表。这就给了你必要时可以恢复被删除的表的机会。
但如果你是删除用户的话,此用户的schema里的所有的表和其他对象都会被永久删掉,并不会用到Recycle Bin!,所以当你不确定以后会不会需要一个用户的对象
时,但你又想拒绝该用户的访问,那么只需要保留该用户和该用户的对象,但拒绝该用户访问数据库,用下面的命令:
SQL> revoke create session from FANJG;
不过,如果此用户还拥有connect这个角色的话,Oracle建议你用alter user <username> account lock命令来确保锁定该用户: