我有一个用户,我想授予该用户对数据库模式的所有READ权限。
一种方法是:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
有没有一种方法可以将所有读取操作归为Grant?
我有一个用户,我想授予该用户对数据库模式的所有READ权限。
一种方法是:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
有没有一种方法可以将所有读取操作归为Grant?
Answers:
是否有任何特权代表对数据库的所有读取操作。
这取决于您如何定义“全部阅读”。
从表和视图中“读取”是SELECT
特权。如果这就是“全部阅读”的意思,那么可以:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
但是,听起来您的意思是一种“看到”所有东西,“看起来却不触摸”的能力。因此,这是我想到的其他阅读类型:
“阅读”视图的定义是SHOW VIEW
特权。
该PROCESS
特权是“读取”其他用户当前正在执行的查询的列表。
“读取”当前复制状态是REPLICATION CLIENT
特权。
请注意,根据相关用户的性质,所有这些信息中的任何一个或全部可能会提供比您打算公开的信息更多的信息。
如果这是您想要做的阅读,则可以将所有这些(或任何其他可用特权)组合在一个GRANT
语句中。
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
但是,没有单个特权可以授予其他特权的某些子集,这听起来就像您要的那样。
如果您是手动操作,并且寻找一种更简单的方法来执行此操作,而又无需记住您通常为特定用户类别做出的确切授权,则可以查找该语句以重新生成可比较的用户的授权,并在周围进行更改创建具有类似特权的新用户:
mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
更改“ not_leet”和“ localhost”以匹配要添加的新用户以及密码,将导致GRANT
创建新用户的可重用语句。
其中,如果您希望单个操作来设置并向用户授予有限的特权集,并可能删除任何非优待的特权,则可以通过创建一个存储过程来封装您想做的所有事情来实现。在该过程的主体中,您将GRANT
使用动态SQL 构建该语句和/或直接操纵授权表本身。
在最近有关数据库管理员的问题中,发布者希望有一个无特权的用户修改其他用户的能力,这当然不是通常可以做的事情-可以修改其他用户的用户从定义上讲几乎不是无特权的用户-但是-在这种情况下,存储过程提供了一个很好的解决方案,因为它们在其DEFINER
用户的安全上下文中运行,从而使EXECUTE
对过程有特权的任何人都可以临时承担提升的特权,以允许他们执行特定的操作。程序完成。
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
这将为SELECT
所有数据库(包括视图)创建一个具有特权的用户。
您可以授予用户的各种权限包括
ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges
要为特定用户提供权限,您可以使用以下框架:
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
我发现这篇文章很有帮助
我在这里找到了逐步指南。
为MySQL创建只读数据库用户帐户
在UNIX提示符下,运行MySQL命令行程序,并通过键入以下命令以管理员身份登录:
mysql -u root -p
输入根帐户的密码。在mysql提示符下,执行以下步骤之一:
要使用户可以从任何主机访问数据库,请键入以下命令:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
如果收集器将与数据库安装在同一主机上,请键入以下命令:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
该命令使用户只能从本地主机对数据库进行只读访问。如果您知道将要安装收集器的主机的主机名或IP地址,请键入以下命令:
grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';
主机名必须可由DNS或本地主机文件解析。在mysql提示符下,键入以下命令:
flush privileges;
输入quit
。
以下是示例命令和确认消息的列表:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
甚至用户也得到了答案,并且@Michael-sqlbot在他的帖子中已经很好地涵盖了大部分要点,但是缺少了要点,所以只是尝试掩盖它。
如果您想向简单用户提供读取权限(不是admin类型的用户),
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
注意:这里需要EXECUTE,这样,如果存在存储过程可以生成报告(很少的select语句),则用户可以读取数据。
将localhost替换为用户将从中连接到数据库的特定IP。
其他读取权限为-
请注意,MySQL 8有所不同
您需要分两个步骤进行操作:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
SHOW VIEW
,不是SHOW_VIEW
,但是您无需将其授予用户,除非您希望他们能够SHOW CREATE VIEW
在视图上...他们可以从视图中选择唯一的SELECT
特权。“将所有读取操作归为授予”是什么意思?