MySQL数据库中用GRANT语句增添新用户

yanglilibaobao 2007-04-02 01:57:45
有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。

下面的例子显示出如何使用MySQL客户安装新用户。这些例子假定权限已缺省被安装。这意味着为了改变,你必须在MySQL正在运行同一台机器上,你必须作为MySQL root用户连接,并且root用户必须对MySQL数据库有insert权限和reload管理权限。另外,如果你改变了root用户口令,你必须如下的MySQL命令指定它。

你可以通过发出GRANT语句增加新用户:


shell> mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;


这些GRANT语句安装3个新用户:

monty:可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令('something'做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。

admin:可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。

dummy:可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。

你也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:


shell> mysql --user=root mysql
mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('something'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')
mysql> INSERT INTO user SET Host='localhost',User='admin',
Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;


取决于你的MySQL版本,对上述,你可能必须使用一个不同数目'Y'值(在3.22.11以前的版本有更少的权限列)。对admin用户,只用在3.22.11开始的版本具有的更加可读的INSERT扩充的语法。

注意,为了设置一个超级用户,你只需创造一个user表条目,其权限字段设为'Y'。不需要db或host表的条目。

在user表中的权限列不是由最后一个INSERT语句明确设置的(对dummy用户),因此那些列被赋予缺省值'N'。这是GRANT USAGE做的同样的事情。

下列例子增加一个用户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';


通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSH PRIVILEGES):


shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
VALUES('localhost','custom',PASSWORD('stupid'));
mysql> INSERT INTO user (Host,User,Password)
VALUES('server.domain','custom',PASSWORD('stupid'));
mysql> INSERT INTO user (Host,User,Password)
VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;

  头3个INSERT语句增加user表条目,允许用户custom用给定口令从不同的主机进行连接,但是没有授予任何许可(所有权限被设置为缺省值'N')。后3个INSERT语句增加db表条目,授予custom以bankaccount、expenses和customer数据库权限,但是只能在从正确的主机存取时。通常,在授权表直接被修改时,服务器必须被告知再次装入他们(用FLUSH PRIVILEGES)以便使权限修改生效。

如果你想要给特定的用户从一个给定的域上的任何机器上存取权限,你可以发出一个如下的GRANT语句:


mysql> GRANT ...
ON *.*
TO myusername@"%.mydomainname.com"
IDENTIFIED BY 'mypassword';


为了通过直接修改授权表做同样的事情,这样做:


mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
PASSWORD('mypassword'),...);
mysql> FLUSH PRIVILEGES;


你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授权表中插入、改变和更新值。你可以在MySQL的Contrib目录找到这些实用程序。
...全文
1556 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel_new 2007-06-08
  • 打赏
  • 举报
回复
能发个如何删除用户的帖吗?全一点的,权限的移除呀什么的
懒得去死 2007-06-08
  • 打赏
  • 举报
回复
回复人:newb921(Angel) ( 一级(初级)) 信誉:100 2007-6-8 11:16:03 得分:0
?

能发个如何删除用户的帖吗?全一点的,权限的移除呀什么的
DROP USER user;
懒得去死 2007-05-07
  • 打赏
  • 举报
回复
无任何权限的话,直接create user就可以了。
AFIC 2007-04-29
  • 打赏
  • 举报
回复
学习
ycg3590 2007-04-29
  • 打赏
  • 举报
回复
哦,有点多,待我细细看来,吸收吸收··
ChumpKlutz 2007-04-29
  • 打赏
  • 举报
回复
学习一下
zhouzidane46 2007-04-02
  • 打赏
  • 举报
回复
全方位发展是我的目标
succeese 2007-04-02
  • 打赏
  • 举报
回复
占个沙发
目 录

第一章MYSQL入门与初步 1
1.1 MYSQL简介 2
1.1.1 MySQL是什么? 2
1.1.2 我需要MySQL吗? 3
1.1.3 我需要付钱吗? 4
1.1.4 如何得到MySQL? 4
1.1.5总结 5
1.2 关系数据库管理系统 5
1.2.1 关系数据库系统 6
1.2.2 数据库系统的发展 7
1.2.3 与数据库系统通讯 8
1.2.4 MySQL的体系结构 8
1.2.5总结 8
1.3 MYSQL使用的SQL语言 9
1.3.1 表、列和数据类型 9
1.3.2函数 9
1.3.3 SQL的语句 9
1.3.4总结 10
1.4 MYSQL数据处理 10
1.4.1 MySQL的数据 10
1.4.1.1、字符串值 10
1.4.1.2数字值 11
1.4.1.3十六进制值 12
1.4.1.4日期和时间值 12
1.4.1.4 NULL值 12
1.4.2列类型概述 12
1.4.3 数字列类型 14
1.4.3.1整数类型 15
1.4.3.2浮点数类型 16
1.4.4 日期和时间类型 18
1.4.4.1 Y2K问题和日期类型 18
1.4.4.2 DATETIME,DATE和TIMESTAMP类型 18
1.4.4.3 TIME类型 19
1.4.4.4 YEAR类型 20
1.4.5 字符串类型 20
1.4.5.1 CHAR和VARCHAR类型 21
1.4.5.2 BLOB和TEXT类型 23
1.4.5.3 ENUM和SET类型 24
1.4.6总结 26
第二章 MySQL的安装 27
2.1 MYSQL系统的安装布局 28
2.1.1 二进制安装 28
2.1.2 RPM安装 28
2.1.3 源代码安装 28
2.1.4总结 29
2.2 安装MYSQL系统的分发 29
2.2.1 在Windows下的安装一个二进制分装 29
2.2.2 在Windows NT/2000下安装成系统服务 29
2.2.3 在Linux下安装一个RPM分发 31
2.2.4 在Linux下安装二进制分发 31
2.2.5 在Linux下安装源代码分发 32
2.2.6 总结 32
2.3 安装后期的的设置与测试 33
2.3.1建立启动MySQL的帐户 33
2.3.2 初始化授权表 33
2.3.3 测试服务器是否工作 34
2.3.4 自动运行和停止MySQL 36
2.3.5 更改root用户的密码 38
2.3.6 修改选项文件 38
2.3.7总结 41
2.4 系统的升级 41
2.4.1 备份数据库与其他配置文件 41
2.4.2 重安装二进制分发 41
2.4.3重安装源代码分发 41
2.4.4 升级一个RPM分发 42
2.4.5 检查数据库是否工作及完整 42
2.4.6总结 42
2.5在同一台机器上运行多个MYSQL服务器 42
2.5.1使用重编译的方法 42
2.5.2使用指定服务器参数的方法 43
2.5.3有关选项文件的问题 44
2.5.4 总结 44
第三章 数据库的基本操作 46
3.1 MYSQL的启动与终止 47
3.1.1 直接运行守护程序 47
3.1.2 使用脚本mysql.server启动关闭数据库 48
3.1.3 使用mysqladmin实用程序关闭、重启数据库 49
3.1.4 启动或停止NT平台上的系统服务 50
3.1.5 使用选项文件提供服务器的参数 51
3.1.6 总结 51
3.2 MYSQL与客户机的连接 51
3.2.1建立和中止与服务器的连接 52
3.2.2利用选项文件简化连接 53
3.2.3 利用 mysql 的输入行编辑器 54
3.2.4 批处理模式连接 55
3.2.5 总结 56
3.3 有关数据库的操作 56
3.3.1 用SHOW显示已有的数据库 56
3.3.2 用Create Dabase 创建数据库 57
3.3.3 用DROP DATABASE删除数据库 57
3.3.4 使用mysqladmin工具创建和删除 58
3.3.5 直接在数据库目录中创建或删除 58
3.3.6 用USE选用数据库 58
3.3.7 总结 58
3.4 有关数据表的操作 59
3.4.1 用SHOW/ DESCRIBE语句显示数据表的信息 59
3.4.2 使用mysqlshow 工具得到信息 60
3.4.3 用CREATE TABLE 语句创建数据表 60
3.4.4利用 SELECT 的结果创建表 62
3.4.5 用ALTER TABLE语句修改表的结构 63
3.4.6 用DROP TABLE 语句删除数据表 64
3.4.7 总结 64
3.5 向数据表插入行记录 64
3.5.1 使用INSERT语句插入数据 64
3.5.2 使用INSERT…SELECT语句插入从其他表选择的行 65
3.5.3 使用replace、replace…select语句插入 66
3.5.4 使用LOAD语句批量录入数据 66
3.5.5 总结 68
3.6 查询数据表中的记录 69
3.6.1 普通查询 69
3.6.2 条件查询 71
3.6.3 查询排序 73
3.6.4 查询分组与行计数 75
3.6.5 查询多个表 77
3.3.6总结 78
3.7 修改、删除数据记录 79
3.7.1 用update修改记录 79
3.7.2 用delete删除记录 79
3.7.3 总结 79
第四章 MYSQL高级特性 81
4.1 集合函数 82
4.1.1 行列计数 82
4.1.2统计字段值的数目 82
4.1.3 计算字段的平均值 83
4.1.4 计算字段值的和 84
4.1.5 计算字段值的极值 84
4.1.6 总结 86
4.2 操作日期和时间 86
4.2.1 返回当前日期和时间 86
4.2.2 自动记录数据的改变时间 88
4.2.3 返回日期和时间范围 90
4.2.5 比较日期和时间 92
4.3 字符串模式匹配 93
4.3.1 标准的SQL模式匹配 93
4.3.2 扩展正则表达式模式匹配 94
4.3.3 总结 96
4.4 深入SELECT的查询功能 96
4.4.1 列和表的别名 96
4.4.1.1列的别名 96
4.4.1.2 在子句中使用列的别名 98
4.4.1.3表的别名 98
4.4.2 取出互不相同的记录 99
4.4.3 NULL值的问题 100
4.4.4 大小写敏感性 102
4.4.5 检索语句与多个表的连接 102
4.4.5.1 全连接 103
4.4.5.2 左连接 105
4.4.6 总结 108
4.5 索引属性 108
4.5.1 索引的特点 108
4.5.2 用Alter Table语句创建与删除索引 109
4.5.3 用CREATE\DROP INDEX创建索引 110
4.5.4 在创建表时指定索引 111
4.5.5 总结 113
第五章 数据库的备份与恢复 114
5.1 数据库目录 115
5.1.1 数据目录的位置 115
5.1.2 数据库的表示法 116
5.1.3 数据库表的表示法 117
5.1.4 MySQL的状态文件 118
5.1.5 总结 120
5.2 重定位数据库目录的内容 120
5.2.3 重定位方法 120
5.2.1 重定位数据目录 121
5.2.2 重定位数据库 121
5.2.3 重定位数据库表 122
5.2.4 重定位状态文件 122
5.2.5 总结 123
5.3 备份和恢复数据表的方法 123
5.3.1 使用SQL语句备份和恢复 123
5.3.2使用mysqlimport恢复数据 125
5.3.3 使用mysqldump备份数据 126
5.3.4 用直接拷贝的方法备份恢复 129
5.3.5 总结 129
5.4 使用更日志文件 130
5.4.1 启用日志 130
5.4.2 重写日志 130
5.4.3 恢复日志内容 130
5.4.4 总结 131
5.5 使用MYSQL内建复制功能 131
5.5.1 配置主服务器 131
5.5.2 配置从服务器 132
5.5.3 创建相互的主从关系 133
5.5.4 总结 133
5.5 总结:备份恢复数据的一般步骤 133
第六章 数据库的维护与修复 136
6.1 数据库表的检查、修复与优化 137
6.1.1 数据库表的维护工具 137
6.1.2 检查数据库表 138
6.1.3 修复数据库表 139
6.1.4优化数据库表 140
6.1.5指定维护过程中使用的内存 141
6.1.6总结 141
6.2 避免与 MYSQL 服务器交互作用 142
6.2.1锁定表的的方法 142
6.2.2 检查表的锁定协议 143
6.2.3 修复表的锁定协议 143
6.2.4 总结 144
6.3日志文件维护 144
6.3.1如何使用的更日志 144
6.3.2如何使用的常规日志 145
6.3.3 总结 145
6.4 建立日常维护规范 145
6.4.1 建立一个数据库表维护规范 145
6.4.2 创建一个适用于定期维护的脚本 145
6.4.3 在unix中用cron定期检查表 146
6.3.4 在系统启动期间检查表 147
6.3.5 总结 148
第七章 数据库安全 149
7.1 MYSQL的权限系统 150
7.1.1授权表的结构 150
7.1.1.1授权表user、db和host的结构和作用 150
7.1.1.2授权表tables_priv和columns_priv的结构和作用 151
7.1.2用户的权限 152
7.1.2.1数据库和表的权限 152
7.1.2.2管理权限 153
7.1.3授权表列的内容 153
7.1.3.1作用域列内容 153
7.1.3.2授权表User、Db和Host的权限列的内容 155
7.1.3.3授权表tables_priv和columns_priv的权限列的内容 155
7.1.4权限系统工作原理 155
7.1.4.1权限系统工作的一般过程 155
7.1.4.2存取控制, 阶段1:连接证实 156
7.1.4.3存取控制,阶段2:请求证实 159
7.1.5 总结 161
7.2 设置用户与并授权 162
7.2.1使用SHOW GRANTS语句显示用户的授权 162
7.2.2 使用GRANT语句创建用户并授权 162
7.2.2.1 GRANT语句的语法 162
7.2.2.2创建用户并授权的实例 164
7.2.3 直接修改授权表创建用户并授权 164
7.2.4 总结 165
7.3 撤销用户与授权 165
7.3.1 使用REVOKE语句撤销授权 165
7.3.2 直接修改授权表撤销用户或授权 166
7.3.3 总结 167
7.4 设置密码 167
7.4.1 使用myadmin实用程序 167
7.4.2使用语句SET PASSWORD 168
7.4.3 直接修改授权表 168
7.4.4 重设置一个遗忘的root口令 168
7.4.5 总结 169
7.5 权限修改何时生效 169
7.5.1 服务器重启动的情况 170
7.5.2 被服务器立即应用的情况 170
7.5.3 直接修改授权表的情况 170
7.5.4 对现有客户连接的影响情况 170
7.5.5 总结 170
7.6 授权原则 170
7.6.1 只有root用户拥有授权表的改写权 170
7.6.2 关于用户、口令及主机的设置 171
7.6.3 授予用户合适的权限 171
7.6.4 MySQL权限系统无法完成的任务 173
7.6.5 总结 173
7.7 MYSQL的其它安全问题 173
7.7.1 不在客户机的命令行上提供密码 173
1可以在命令行上提供密码 173
7.7.2 使用SSH加密客户机连接 174
7.7.3不要使用Unix的root用户运行MySQL守护进程 174
7.7.4数据库目录的安全 174
7.7.4.1可能的安全漏洞 174
7.7.4.2在Unix设置合适的数据库目录权限 175
7.7.4.3在NT系统中设置合适的数据库目录权限 175
7.7.5影响安全的mysqld选项 175
7.7.6 总结 176
第八章 数据库优化 177
8.1 索引的使用 178
8.1.1索引对单个表查询的影响 178
8.1.2索引对多个表查询的影响 180
8.1.3多列索引对查询的影响 181
8.1.4索引的作用 182
8.1.5 索引的弊端 182
8.1.6 选择索引的准则 183
8.1.7 总结 184
8.2 数据类型的问题 184
8.2.1 有助于效率的类型选择 184
8.2.2 有关BLOB和TEXT类型 185
8.2.3 使用ANALYSE过程检查表列 186
8.2.3 总结 187
8.3 SQL查询的优化 187
8.3.1 使用EXPLAIN语句检查SQL语句 187
8.3.2 SELECT 查询的速度 188
8.3.2.1 MySQL怎样优化WHERE子句 188
8.3.2.2 MySQL怎样优化LEFT JOIN 190
8.3.2.3 MySQL怎样优化LIMIT 190
8.3.4 记录转载和修改的速度 191
8.3.4.1 INSERT查询的速度 191
8.3.4.2 UPDATE查询的速度 193
8.3.4.3 DELETE查询的速度 193
8.3.4索引对有效装载数据的影响 193
8.3.5 总结 194
8.4 数据库表的处理 194
8.4.1 选择一种表类型 194
8.4.1.1 静态(定长)表的特点 195
8.4.1.2 动态表的特点 196
8.4.1.3 压缩表的特点 196
8.4.1.4 内存表的特点 197
8.4.2 数据库表的数量的问题 197
8.4.3 数据库表级锁定的问题 198
1、对此一个主要的问题如下: 198
2、INSERT DELAYED 在客户机方的作用 199
8.4.4 对表进行优化 200
8.4.5 总结 201
8.5 服务器级优化 201
8.5.1 磁盘问题 201
8.5.2硬件问题 202
8.5.3 服务器参数的选择 202
8.5.4编译和链接怎样影响MySQL的速度 203
8.5.5 总结 203
思考题答案 206
附录一 MYSQL 语言参考 217
1.1 数据类型参考:怎么写字符串和数字 217
1.1.1 字符串 217
1.1.2 数字 219
1.1.3 十六进制值 219
1.1.4 NULL值 219
1.1.5 数据库、表、索引、列和别名的命名 220
1.1.5.1 名字的大小写敏感性 221
1.2 用户变量 222
1.3 列类型 222
1.3.1 列类型存储需求 225
数字类型 226
日期和时间类型 226
串类型 226
1.3.2 数字类型 227
1.3.3 日期和时间类型 229
1.3.3.1 Y2K问题和日期类型 230
1.3.3.2 DATETIME, DATE和TIMESTAMP类型 230
1.3.3.3 TIME类型 233
1.3.3.4 YEAR类型 234
1.3.4 字符串类型 234
1.3.4.1 CHAR和VARCHAR类型 234
1.3.4.2 BLOB和TEXT类型 235
1.3.4.3 ENUM类型 236
1.3.4.4 SET类型 237
1.3.5 为列选择正确的类型 238
1.3.6 列索引 238
1.3.7 多列索引 239
1.3.8 使用来自其他数据库引擎的列类型 239
1.4 用在SELECT和WHERE子句中的函数 240
1.4.1 分组函数 240
1.4.2 常用的算术操作 241
1.4.3 位函数 242
1.4.4 逻辑运算 242
1.4.5 比较运算符 243
1.4.6 字符串比较函数 246
1.4.7 类型转换运算符 248
1.4.8 控制流函数 248
1.4.9 数学函数 249
1.4.10 字符串函数 255
1.4.11 日期和时间函数 262
1.4.12 其他函数 269
1.4.13 与GROUP BY子句一起使用的函数 272
1.5 CREATE DATABASE句法 274
1.6 DROP DATABASE句法 274
1.7 CREATE TABLE句法 274
1.1.1 隐含的列说明改变 279
1.8 ALTER TABLE句法 280
1.9 OPTIMIZE TABLE句法 282
1.10 DROP TABLE句法 283
1.11 DELETE句法 283
1.12 SELECT句法 284
1.13 JOIN句法 286
1.14 INSERT句法 287
1.15 REPLACE句法 290
1.16 LOAD DATA INFILE句法 291
1.17 UPDATE句法 296
1.18 USE句法 297
1.20 KILL句法 298
1.22 EXPLAIN句法(得到关于SELECT的信息) 303
1.23 DESCRIBE句法 (得到列的信息) 307
1.24 LOCK TABLES/UNLOCK TABLES句法 308
1.25 SET OPTION句法 309
1.26 GRANT和REVOKE句法 310
1.27 CREATE INDEX句法 313
1.29 注释句法 314
1.30 CREATE FUNCTION/DROP FUNCTION句法 315

2.1 各种MYSQL程序概述 318
myisamchk 318
make_binary_release 318
msql2mysql 318
mysql 318
mysqlaccess 319
mysqladmin 319
mysqlbug 319
mysqld 319
mysqldump 319
mysqlimport 319
mysqlshow 319
mysql_install_db 319
replace 319
safe_mysqld 319
2.2 MYSQLADMIN 319
2.3 MYSQLDUMP 320
2.4 MYSQLIMPORT 323
2.5 MYISAMPACK 324
2.6 MYISAMCHK 332


57,063

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧