【发布时间】:2016-06-17 12:58:09
【问题描述】:
我正在使用 mysql 数据库。我有一个名为tbl_user 的表,我需要将其更改为每个用户的只读表。如何将表格更改为只读?
【问题讨论】:
-
为什么需要一个任何用户都无法更改或编辑的表格? :D
-
@Terry Seidler 这是一个包含我的应用程序登录凭据的表。
我正在使用 mysql 数据库。我有一个名为tbl_user 的表,我需要将其更改为每个用户的只读表。如何将表格更改为只读?
【问题讨论】:
要授予所有用户选择权限,请使用 public 而不是完整的用户列表
REVOKE ALL ON tbl_user FROM PUBLIC
GRANT SELECT ON tbl_user TO PUBLIC
【讨论】:
GRANT OPTION。 ALL 不要删除GRANT 权限。
除了撤销权限,还有一种方法是使用触发器
/* triggers */
delimiter //
DROP TRIGGER IF EXISTS stop_table_insert;
CREATE TRIGGER stop_table_insert
BEFORE INSERT ON `table`
FOR EACH ROW
BEGIN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance';
END;//
DROP TRIGGER IF EXISTS stop_table_update;
CREATE TRIGGER stop_table_update
BEFORE UPDATE ON `table`
FOR EACH ROW
BEGIN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance';
END;//
DROP TRIGGER IF EXISTS stop_table_delete;
CREATE TRIGGER stop_table_delete
BEFORE DELETE ON `table`
FOR EACH ROW
BEGIN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance';
END;//
delimiter ;
【讨论】:
使用REVOKEcommand 并撤销用户对该表的 INSERT / UPDATE / DELETE 权限
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
【讨论】:
您需要为所有用户 REVOKE 更新/修改/GRANT 权限并添加 SELECT。
REVOKE ALL ON readonly_table FROM tbl_user ;
GRANT SELECT ON readonly_table TO tbl_user;
如果用户在 readonly_table 上有授权选项,请执行以下操作:
REVOKE GRANT OPTION ON readonly_table FROM tbl_user;
【讨论】:
GRANT SELECT ON tbl_user TO user;
GRANT SELECT, INSERT, UPDATE, DELETE ON tbl_user TO user;
【讨论】: