一、数据库元素的拥有者是创建该数据库元素时所使用的用户名。拥有者拥有对该数据库元素的一切操作权限,其他用户对该数据库元素没有任何权限,这些用户要使用数据库,必须经过拥有者授权。
(在实践中,我几乎从没有使用到“用户与数据库权限”这部分知识)
二、访问权限的类型
1.SELECT
2.INSERT
其权限可以授予特定列,而不是整个数据库。(从没有用过)
3.UPDATE
4.DELETE
5.REFERENCES(未使用过)
6.EXECUTE
允许用户执行存储过程(不明白存储过程的作用,也没有用过,不会用)
7.ALL PRIVILEGES
授予用户某个表或某个视图当中的所有上述权限。
8.默认情况下,非拥有者通过授权获得数据库的访问权限后,并不具备将其获得权限授予其他用户的权限,但是,若用户在授予权限的过程中使用了下面的子句:
WITH GRANT OPTION
非拥有者用户就可以向其他用户授予自己的权限。
(这种理解,有待验证)
三、存储访问权限
1.表及视图的访问权限被存储于数据字典当中。通常,访问权限被分割成两个系统表,这两个系统表的名称类似于SYSTABLEPERM和SYSCOLPERM。
SYSTABLEPERM:用在访问权限授予整个表或整个视图时。
SYSCOLPERM:用在授权给某个表或视图当中的特定列之上。
这两个表有复杂的内容,要研究。
学习资料:
《SQL语言详解》第3版,P180
我在MySQL中用
SHOW DATABASES
语句,得到的结果中没有这两个表,看到的系统数据库(非我创建)有
information_schema
test
performance_schema
不知道这三个数据的作用是什么,要研究。
学习资料:
通过 mysql 的 INFORMATION_SCHEMA信息数据库得到元数据
http://www.cppblog.com/flyinghare/archive/2012/03/26/169036.html
四、授权
1.创建数据库元素的用户或具有GRANT权限的用户才能授权其他用户,语法是:
GRANT type_of_rights
ON table_or_view_name
TO user_id
给经理访问sales_summary视图的权限,例子:
GRANT SELECT
ON sales_summary
TO acctag_mgr
让经理可以给其他用户传递权限,例子:
GRANT SELECT
ON sales_summary
TO acctag_mgr
WITH GRANT OPTION
为某些用户设置对基表的有限权限,例子
GRANT SELECT,UPDATE( selling_price,sale_date)
ON volume
TO intern1,intern2,intern3;
五、撤销权限
1.删除之前授予的权限,语句:
REVOKE access_rights
ON table_or_view_name
FROM user_id
例子:
REVOKE SELECT,UPDATE(selling_price,sale_date)
ON volume
FROM intern1,intern2,inter3;
不懂的例子一:
REVOKE SELECT
ON sales_summary
FROM acctg_mgr
RESTRICT;
不懂的例子二:
REVOKE SELECT
ON sales_summary
FROM acctg_mgr
CASCADE;