mysql 数据库授权(给某个用户授权某个数据库)

本文详细介绍了MySQL中的权限管理系统,包括如何使用GRANT语句来精确地控制不同用户的数据库访问权限。通过具体示例展示了如何为用户分配特定的操作权限,如查询、插入、更新和删除等。

原文链接:http://www.cnblogs.com/jifeng/archive/2011/03/06/1972183.html

 

先设置该用户只有show database权限

grant select,insert,update,delete on redmine1.* to jira@"%" identified by "jira";

 

授权命令GRANT 语句的语法如下:
GRANT privileges (columns)
ON what
TO user IDENTIFIEDBY "password"
WITH GRANT OPTION
对用户授权
mysql>grant rights on database.* to user@host identified by "pass";
例1:
增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
ON 子句中*.* 说明符的意思是“所有数据库,所有的表”
例2:
增加一个用户test2密码为abc, 让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
例子3
增加一个用户custom,他能从主机localhost、server.domain和whitehouse.gov连接。他只想要从 localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从所有3台主机存取customer 数据库。他想要从所有3台主机上使用口令stupid。

为了使用GRANT语句设置个用户的权限,运行这些命令:
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.* TO custom@localhost IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.* TO custom@whitehouse.gov IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.* TO custom@'%' IDENTIFIED BY 'stupid';
==============================================
权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。
权限 列 Context
select Select_priv 表
insert Insert_priv 表
update Update_priv 表
delete Delete_priv 表
index Index_priv 表
alter Alter_priv 表
create Create_priv 数据库、表或索引
drop Drop_priv 数据库或表
grant Grant_priv 数据库或表
references References_priv 数据库或表
reload Reload_priv 服务器管理
shutdown Shutdown_priv 服务器管理
process Process_priv 服务器管理
file File_priv 在服务器上的文件存取

 

1.select、insert、update和delete权限 允许你在一个数据库现有的表上实施操作,是基本权限
2.alter权限允许你使用ALTER TABLE
3.create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表 如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库!
4.grant权限允许你把你自己拥有的那些权限授给其他的用户。
你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。 可以同时列出许多被授予的单个权限。
例如,如果想让用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权:
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db.* TO 'user'@'%' IDENTIFIEDBY "pass"

 

以上是我从别的地方拷贝过来后稍作修改的文字,下面自己写一些需要注意的东西。

为什么使用了Grant all on db.* to user identified by "pass"后,在主机上访问数据库还会出现ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES) 的错误提示?

解答方法如下:运行命令 Grant all on db.* to 'user'@'localhost' identified by "pass"

原因是:当不加@选项时,效果与加@'%'是一样的,'%'从名义上包括任何主机,(%必须加上引号,不然与@放在一起可能不会被辨认出。)不过有些时候(有些版本)'%'不包括localhost,要单独对@'localhost'进行赋值

<think>好的,我现在需要处理用户关于MySQL数据库用户授权语法和示例的查询。用户明确要求授权相关的语句和示例,所以我需要先回忆和整理相关的MySQL授权知识。 首先,我记得MySQL中使用GRANT语句来进行用户授权。GRANT的基本语法结构应该是GRANT后面跟权限列表,然后是ON指定数据库和表,接着是TO用户,并可能包含IDENTIFIED BY设置密码,最后可能有WITH GRANT OPTION。不过需要确认具体语法是否正确,比如权限是否需要逗号分隔,数据库和表的表示方法,比如*.*代表所有数据库和表,以及主机部分的处理,比如'user'@'host'。 然后,用户可能需要一些具体的示例。例如,授予某个用户对特定数据库的所有权限,或者只授予SELECT、INSERT权限。另外,WITH GRANT OPTION的使用场景也需要解释清楚,说明这个选项允许用户将自己的权限授予他人。 接下来,需要检查是否有常见的错误点需要注意,比如授权后是否必须执行FLUSH PRIVILEGES来刷新权限。根据引用[2]中的内容,他们在修改密码后执行了FLUSH PRIVILEGES,这可能意味着在授权后也需要这个操作,但实际上GRANT语句通常会自动生效,除非手动修改了授权表,可能需要显式刷新。这点需要明确说明,避免用户混淆。 另外,用户可能对权限的范围有疑问,比如如何限制用户只能从特定主机访问。引用[2]中提到用户root的权限设置,可能涉及到主机部分,比如'root'@'localhost',所以在示例中应该包含主机名的部分,如'username'@'localhost'或使用'%'允许所有主机。 还需要注意权限的层级,比如全局权限、数据库级、表级、列级等。例如,GRANT SELECT ON database.*表示授予数据库级别的SELECT权限,而GRANT SELECT (column) ON database.table则更细化到列。 然后,查看用户提供的引用内容。引用[3]提到语法结构中的关键字大写和可选项,可能需要注意语法格式的正确性,比如CHARACTER SET和COLLATE,但这些可能与授权无关,但需要确保GRANT语句的语法正确。 另外,用户可能需要撤销权限的命令,即REVOKE,虽然用户没有直接问,但作为相关问题可以提及,或者在回答中简要说明。 现在需要组织这些信息,以清晰的结构呈现,先给出基本语法,再提供多个示例,并附上注意事项。同时,根据用户提供的引用,引用[2]中的FLUSH PRIVILEGES可能在修改权限后需要执行,但GRANT通常不需要,除非手动修改表。因此需要说明是否需要执行该命令。 还需要验证语法是否正确,比如GRANT权限列表是否需要逗号分隔,ON子句的正确格式,以及IDENTIFIED BY是否在GRANT语句中有效。例如,MySQL是否允许在GRANT中同时创建用户并设置密码,或者是否需要先创建用户授权。根据MySQL版本的不同,可能有所变化,但通常GRANT可以创建用户如果不存在,前提是使用IDENTIFIED BY。 例如,GRANT SELECT ON db.* TO 'user'@'host' IDENTIFIED BY 'password'; 这样的语句在旧版本中可以创建用户,但新版本可能需要先创建用户。因此,可能需要分步骤说明,先创建用户授权,或者确认当前版本的做法。不过用户可能只需要标准的语法示例,所以可以给出常见的写法,并提示如果用户不存在需要先创建。 最后,生成相关问题,可能包括如何撤销权限、查看权限、处理权限错误等。</think>### MySQL数据库用户授权语法及示例 MySQL通过`GRANT`语句实现用户权限管理,支持精确控制用户数据库对象的访问权限[^2][^3]。 #### 基础语法 ```sql GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名' [IDENTIFIED BY '密码'] [WITH GRANT OPTION]; ``` - **权限列表**:`SELECT`, `INSERT`, `UPDATE`, `ALL PRIVILEGES`等,多个权限用逗号分隔 - **数据库名.表名**:`*.*`表示所有表,`testdb.*`表示某所有表 - **主机名**:`localhost`表示本地访问,`%`表示允许任意主机访问 - `WITH GRANT OPTION`:允许用户将自身权限授予他人 #### 常用示例 1. **授予全局权限** 允许用户`admin`从任意主机管理所有数据库: ```sql GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'Admin@1234' WITH GRANT OPTION; ``` 2. **授予数据库级权限** 允许用户`dev_user`本地访问`mydb`的所有表: ```sql GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'dev_user'@'localhost' IDENTIFIED BY 'Dev@2023'; ``` 3. **授予表级权限** 允许用户`report`读取`sales.orders`表: ```sql GRANT SELECT ON sales.orders TO 'report'@'192.168.1.%' IDENTIFIED BY 'Report#2023'; ``` 4. **刷新权限缓存** 修改权限后建议执行: ```sql FLUSH PRIVILEGES; -- 使权限变更立即生效 ``` #### 注意事项 1. 新用户需先创建后授权,或直接在`GRANT`语句中指定密码自动创建 2. 使用`SHOW GRANTS FOR '用户'@'主机'`查看已有权限 3. 撤销权限使用`REVOKE`语句,语法结构与`GRANT`类似
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值