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)
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
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’;
# 1. connect as an admin on database / cluster
mysql -u root -h mydb.123456789012.us-east-1.rds.amazonaws.com
# 2. create user protected with strong password with global access ('%') or local access ('localhost')
mysql> CREATE USER 'ro_user'@'%' IDENTIFIED BY 'abcd1234%^&#';
# 3. grant SELECT privileges for relevant user
mysql> GRANT SELECT ON *.* TO 'ro_user'@'%' WITH GRANT OPTION;
# 4. reload grant tables on database
mysql> FLUSH PRIVILEGES;
# 5. verify grant are placed as expected
mysql> show grants for 'ro_user'@'%';
// output:
// +------------------------------------------------------+
// | Grants for ro_user@% |
// +------------------------------------------------------+
// | GRANT SELECT ON *.* TO 'ro_user'@'%' WITH GRANT OPTION |
// +------------------------------------------------------+
// 1 row in set (0.00 sec)
mysql> exit
8条答案
按热度按时间z3yyvxxp1#
如果有任何单一权限代表数据库上的所有读取操作。
这取决于你如何定义“全部阅读”。
从表和视图中“阅读”是
SELECT
权限。如果这就是您所指的“全部读取”,那么是的:然而,听起来你指的是“看到”一切的能力,“看而不摸”的能力,所以,下面是我想到的其他类型的阅读:
“阅读”视图的定义是
SHOW VIEW
权限。其他用户“阅读”当前正在执行的查询列表是
PROCESS
权限。“阅读”当前复制状态是
REPLICATION CLIENT
权限。请注意,根据所涉及用户的性质,其中任何一个或全部可能会公开比您打算公开的更多的信息。
如果这就是您想要读取的阅读,可以将其中任何一个(或the available privileges中的任何其他内容)组合到一个
GRANT
语句中。但是,没有一个特权可以赠款其他特权的某个子集,这听起来像是您在问的问题。
如果您正在手动执行操作,并寻找一种更简单的方法来完成此操作,而不需要记住通常为某类用户授予的确切权限,则可以查找语句以重新生成类似用户的赠款,然后更改它以创建具有类似权限的新用户:
更改'not_leet'和'localhost'以匹配您要添加的新用户沿着密码,将生成一个可重用的
GRANT
语句来创建新用户。对于,如果您希望通过单个操作来设置和授予用户有限的权限集,并且可能删除任何不应具有的权限,则可以通过创建一个存储过程来完成,该存储过程封装了您要执行的所有操作。在该过程的主体中,您将使用动态SQL构建
GRANT
语句和/或直接操作授予表本身。在this recent question on Database Administrators中,发布者希望非特权用户能够修改其他用户,这当然不是正常情况下可以做到的--根据定义,可以修改其他用户的用户不是非特权用户--然而,存储过程在这种情况下提供了一个很好的解决方案,因为它们使用
DEFINER
用户的安全上下文运行,从而允许对该过程具有X1 M8 N1 X特权的任何人临时承担提升的特权,以允许他们执行该过程完成的特定事情。ccrfmcuu2#
这将创建一个对所有数据库(包括视图)具有
SELECT
权限的用户。dsf9zpds3#
请注意,MySQL 8与此不同
你需要分两步来做:
pbpqsu0x4#
您可以授予用户的各种权限包括
要为特定用户提供权限,可以使用以下框架:
我发现this文章非常有帮助
ozxc1zmp5#
一步一步的指南,我发现here。
为MySQL创建只读数据库用户帐户
在UNIX提示符下,运行MySQL命令行程序,并通过键入以下命令以管理员身份登录:
键入root帐户的密码。在mysql提示符下,执行以下步骤之一:
要给予用户从任何主机访问数据库的权限,请键入以下命令:
如果收集器将与数据库安装在同一主机上,请键入以下命令:
此命令仅授予用户从本地主机对数据库的只读访问权限。如果您知道将安装收集器的主机的主机名或IP地址,请键入以下命令:
主机名必须可由DNS或本地hosts文件解析。在mysql提示符下,键入以下命令:
键入
quit
。以下是示例命令和确认消息的列表:
x0fgdtte6#
甚至用户也得到了答案,@Michael - sqlbot在他的帖子中很好地涵盖了大部分要点,但有一点缺失,所以只是试图涵盖它。
如果要向简单用户(非管理员类型)提供读取权限-
注意:这里需要EXECUTE,这样如果有生成报告的存储过程(只有很少的选择语句),用户就可以读取数据。
将localhost替换为用户将从其连接到DB的特定IP。
其他读取权限为-
rmbxnbpk7#
如果您希望在授予读权限后视图是只读的,则可以在视图DDL定义中使用ALGORITHM = TEMPTABLE。
vmpqdwk38#
**解决方案:**这里有一些在mysql上创建只读用户的实用手册。