| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
|
作 者: 晏子 2.4 不用grant设置用户 当你发出一条grant语句时,你指定一个用户名和主机名,可能还有口令。对该用户生成一个user表记录,并且这些值记录在user、host和password列中。如果你在grant语句中指定全局权限,这些权限记录在记录的权限列中。其中要留神的是grant语句为你加密口令,而insert不是,你需要在insert中使用password()函数加密口令。 如果你指定数据库级权限,用户名和主机名被记录在db表的user和host列。你为其授权的数据库记录在db列中,你授予的权限记录在权限列中。 对于表级和列级权限,效果是类似的。在tables_priv和columns_priv表中创建记录以记录用户名、主机名和数据库,还有相关的表和列。授予的权限记录在权限列中。 如果你还记得前面的介绍,你应该能即使不用grant语句也能做grant做的事情。记住在你直接修改授权表时,你将通知服务器重载授权表,否则他不知道你的改变。你可以执行一个mysqladmin flush-privileges或mysqladmin reload命令强迫一个重载。如果你忘记做这个,你会疑惑为什么服务器不做你想做的事情。 下列grant语句创建一个拥有所有权的超级用户。包括授权给别人的能力: grant all on *.* to anyname@localhost identified by "passwd" insert into user values("localhost","anyname",password("passwd"), grant reload on *.* to flush@localhost identified by "flushpass" insert into user (host,password,reload) values("localhost","flush",password("flushpass"),"y") grant all on sample.* to boris@localhost identified by "ruby" insert into user (host,user,password) values("localhost","boris",password("ruby")) insert into db values("localhost","sample_db","boris","y","y","y","y","y","y","n","y","y","y") "n"列是为grant权限;对末尾的一个数据库级具有with grant option的grant语句,你要设置该列为"y"。 要设置表级或列级权限,你对tables_priv或columns_priv使用insert语句。当然,如果你没有grant语句,你将没有这些表,因为它们在mysql中同时出现。如果你确实有这些表并且为了某些原因想要手工操作它们,要知道你不能用单独的列启用权限。 你设置tables_priv.table_priv或columns_priv.column_priv列来设置包含你想启用的权限值。例如,要对一个表启用select和insert权限,你要在相关的tables_priv的记录中设置table_priv为"select,insert"。 如果你想对一个拥有mysql账号的用户修改权限,使用update而不是insert,不管你增加或撤销权限都是这样。要完全删除一个用户,从用户使用的每个表中删除记录。 如果你愿意避免发一个查询来直接修改全权表,你可以看一下mysql自带的mysqlaccess和mysql_setpermissions脚本。 附录1 小测验 grant all on samp_db.* to fred@*.snake.net identified "cocoa" 而fred碰巧在服务器主机上有个账号,所以他试图连接服务器: %mysql -u fred -pcocoa samp_db 为什么? 原因是: 先考虑一下mysql_install_db如何建立初始权限表和服务器如何使用user表记录匹配客户连接。在你用mysql_install_db初始化你的数据库时,它创建类似这样的user表: host user 头两个记录允许root指定localhost或主机名连接本地服务器,后两个允许匿名用户从本地连接。当增加fred用户后, host user
在服务器启动时,它读取记录并排序它们(首先按主机,然后按主机上的用户),越具体越排在前面: host user root fred 有localhost的两个记录排在一起,而对root的记录排在第一,因为它比空值更具体。pit.snake.net的记录也类似。所有这些均是没有任何通配符的字面上的host值,所以它们排在对fred记录的前面,特别是匿名用户排在fred之前。 结果是在fred试图从localhost连接时,host列中的一个空用户名的记录在包含%.snake.net的记录前匹配。该记录的口令是空的,因为缺省的匿名用户没有口令。因为在fred连接时指定了一个口令,由一个错配且连接失败。 这里要记住的是,虽然用通配符指定用户可以从其连接的主机是很方便。但你从本地主机连接时会有问题,只要你在table表中保留匿名用户记录。 一般地,建议你删除匿名用户记录: mysql> delete from user where user=""; 更进一步,同时删除其他授权表中的任何匿名用户,有user列的表有db、tables_priv和columns_priv。 附录2 使一个新的mysql安装更安全 在unix(linux)上,在按照手册的指令安装好mysql后,你必须运行mysql_install_db脚本建立包含授权表的mysql数据库和初始权限。在windows上,运行分发中的setup程序初始化数据目录和mysql数据库。假定服务器也在运行。 当你第一次在机器上安装mysql时,mysql数据库中的授权表是这样初始化的: 你可以从本地主机(localhost)上以root连接而不指定口令。root用户拥有所有权限(包括管理权限)并可做任何事情。(顺便说明,mysql超级用户与unix超级用户有相同的名字,他们彼此毫无关系。) % mysql -h localhost test % mysql -h pit.snake.net test 你以root连接mysql甚至不指定口令的事实只是意味着初始安装不安全,所以作为管理员的你首先要做的应该是设置root口令,然后根据你设置口令使用的方法,你也可以告诉服务器重载授权表是它知道这个改变。(在服务器启动时,它重载表到内存中而可能不知道你已经修改了它们。) 对mysql 3.22和以上版本,你可以用mysqladmin设置口令: % mysqladmin -u root password yourpassword 对于mysql的任何版本,你可以用mysql程序并直接修改mysql数据库中的user授权表: % mysql -u root mysql 如果你有mysql的老版本,使用mysql和update。 在你设置完口令后,通过运行下列命令检查你是否需要告诉服务器重载授权表: % mysqladmin -u root status 如果服务器仍然让你以root而不指定口令而连接服务器,重载授权表: % mysqladmin -u root reload 在你设置了root的口令后(并且如果需要重载了授权表),你将需要在任何时候以root连接服务器时指定口令。 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:mysql安全性指南 (2)(转) 下一篇:microsoft sql server 7.0安全问题 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||