linux程序设计——MySQL管理(第八章)

8.2.2 创建用户并赋予权限

作为MySQL管理员,最常见的工作就是维护用户信息——在MySQL中添加和删除用户并管理它们的权限。通过在MySQL控制台中使用grant和revoke命令来管理用户权限。

1.grant命令

MySQL的grant命令几乎完全遵循SQL92的语法,它的常规格式是:

grant <privilege> on <object> to <user> [identified by user-password] [with grant option];

可以赋予的特权值如下所示:

值          说明

alter       改变表和索引

create      创建数据库和表

delete      从数据库中删除数据

drop        删除数据库和表

index       管理索引

insert      在数据库中添加数据

lock tables 允许锁定表

select      提取数据

update      修改数据

all         以上所有

一些命令还有其他选项,例如create view授予用户创建视图的权限。

授予特权的对象被标识为:

databasename.tablename

在linux系统中,*代表通配符,因此*.*代表每个数据库中的每个对象,而foo.*代表数据库foo中的每个表。

如果指定的用户已经存在,它的特权会被编辑以反映所做的修改。如果该用户不存在,就会以指定的特权被创建。

在SQL语法中,特殊字符%代表通配符,它与shell环境中*号的作用完全一样。如果想要授予用户rick从wiley.com域中人呢和主机访问的权限,可以把rick描述为:

[email protected]‘%.wiley.com‘

任何时候使用%通配符都必须把它放在引号中,以与其他文本分开。

还可以使用IP/网络掩码标识(N.N.N.N/M.M.M.M)来为访问控制设置一个网络地址。

正如之前使用[email protected]‘192.168.0.0/255.255.255.0‘来授予rick从本地网络中任何机器连接的特权那样,也可以指定[email protected]‘192.168.0.1‘来将rick的访问限制到一台工作站,或者指定[email protected]‘192.0.0.0/255.0.0.0‘来扩大范围以包括192这个A类网络中的所有机器。

下面是另外一个例子:

mysql> GRANT ALL ON foo.* TO [email protected]‘%‘ IDENTIFIED BY ‘bar‘;

这将创建用户rick,它拥有对数据库foo的所有权限,并能以初始密码bar从任何机器进行连接。

如果数据库foo尚未存在,那么用户rick现在将拥有使用SQL命令create database来创建该数据库的权限。

IDENTIFIED BY子句是可选的,但在创建用户的同时最好确保它们都设置有密码。

SQL中的下划线是一种匹配任意单个字符的模式,这与%匹配一个字符串非常相似。

一般来说,with grant option只会用来创建二级管理员。但是,它也可以允许一个新创建的用户将授予它的特权赠予其他用户。

2. revoke命令

管理员不仅可以授予用户权限,同样能够剥夺用户权限,这是通过revoke命令来完成的。

revoke <a_privilege> on <an_object> from <a_user>

这与grant命令的格式很相似。例如:

mysql> REVOKE INSERT ON foo.* FROM [email protected]‘%‘;

但是,revoke命令不能删除用户,如果想要完全删除一个用户,不要只是修改它们的权限,而应用revoke来删除它们的权限。然后,可以切换到内部的mysql数据库,通过从user表中删除相应的行来完全删除一个用户:

mysql> use mysql;

mysql> DELETE FROM user WHERE user = "rick";

mysql> FLUSH PRIVILEGES;

因为未指定主机,所以可以确保删除了想要删除的MySQL用户(本例是rick)的每个实例。完成这个之后,一定要返回自己的数据库(使用use命令),否则仍然在MySQL自己的内部数据库中。

delete与grant和revoke并不属于同一范畴,由于MySQL处理权限方式的需要,这里的SQL语法是必需的。通过直接更新MySQL的权限表(因此首先调用命令use mysql)来有效地完成修改的。

在更新表之后,必须使用命令FLUSH PRIVILEGES来告诉MySQL服务器,它需要重新加载它的权限表。

8.2.3 密码

如果需要修改密码,就需要以root用户身份连接到MySQL服务器,然后直接更新用户信息。例如:

mysql> use mysql;

mysql> SELECT host, user, password FROM user;

如果想要给用户foo指定密码bar,可以这样做:

mysql> UPDATE user SET password = password(‘bar‘) WHERE user = ‘foo‘;

8.2.4 创建数据库

如果想要一个名为rick的数据库,之前以相同的名字创建了一个用户。首先需要授予用户rick广泛的权限以允许它创建新的数据库,这样做对一个开发系统尤其有用,因为它可以让用户有更大的灵活性。

mysql> GRANT ALL ON *.* TO [email protected] IDENTIFIED BY ‘secretpassword‘;

现在以rick用户身份登录并创建数据库来测试权限设置:

$mysql -u rick -p

Enter password:

...

mysql> CREATE DATABASE rick;

告诉MySQL想使用新的数据库:

mysql> use rick;

现在就有可以想数据库中添加想要的表和信息。在以后的登录中,可以在命令行的结尾指定数据库,而不再需要使用use命令:

$mysql -u rick -p rick

在按照提示输入密码之后,作为连接过程的一部分,在默认情况下,将自动切换到使用数据库rick。

8.2.5 数据类型

现在,有了可以运行的MySQL服务器、一个安全的用户登录和一个准备好的数据库。接下来,需要创建一些包含列的表来保存数据。但是,在此之前,需要了解MySQL支持的数据类型。

MySQL的数据类型非常标准:

1.布尔类型

可以用关键字BOOL来定义布尔序列,它将有TRUE和FALSE,也可以持有NULL。

2.字符类型

有多种字符类型可供选择,前3个是标准的,后3个是MySQL特有的:

定义            说明

CHAR            单字符

CHAR(N)         正好有N个字符的字符串,如果必要会以空格字符填充。限制为255字符。

VARCHAR(N)      N个字符的可变长数组。限制为255个字符。

TINYTEXT        类似VARCHAR(N)

3.数值类型

数值类型分为整型和浮点型。如下所示:

定义            类型        说明

TINYINT         整型        8位数据类型

SMALLINT        整型        16位数据类型

INT             整型        32数据类型,这是标准类型。

DOUBLE(D,N)     浮点型      有符号双精度浮点数,有D位数字和N位小数

NUMERIC(P,S)    浮点型      总长为P位的真是数字,小数点后有S位数字。与DOUBLE不同,这是一个准确的数,因此适合用来存储货币值,但处理效率会低一点。

4.时间类型

有5种时间数据类型可供选择使用,如下所示:

定义            说明

DATE            存储从1000年1月1日--9999年12月31日之前的日期

TIME            存储从-838:59:59--838:59:59之间的时间

DATETIME        存储从1000年1月1日--9999年12月31日最后一秒之间的日期

TIMESTAMP       存储从1970年1月1日--2037年之间的时间戳

YEAR            存储年份

8.2.6 创建表

至此,运行了数据库服务器,了解了如何分配用户权限以及如何创建数据库和一些基本的数据库类型,现在可以创建表了。

一个数据库只不过是一系列的行,而每行又由固定数目的列组成。它非常像电子表格,除了每行都必须包含相同数目和类型的列,而且每行必须以某种方式不同于表中的其他行。

创建数据库对象的完整SQL语法被称为DDL(data definition language)。

创建表的基本语法是:

CREATE TABLE <table_name> (

colum type[NULL | NOT NULL] [AUTO_INCREMENT] [PRIMARY KEY]

[, ...]

[, PRIMARY KEY (colum [, ...])]

)

可以用DROP TABLE语法来删除表:

DROP TABLE <table_name>;

关键字          说明

AUTO_INCREMENT  这个关键字告诉MySQL,任何情况,在该列中写入NULL值时,都会自动把一个分配的递增数字填入列数据中。这是一个非常有用的特征,它可以通过MySQL来自动为表中的行分配一个唯一的数字,尽管它只能用于属于主键的列。

NULL            一个特殊的数据库值,它通常用来表示"未知",也能用来表示"无关",语法NOT NULL意味着这行不能存储NULL值,这对阻止某些列持有NULL值是很有用的。

PRIMARY KEY     指出此列的数据必须是唯一的,该表每行中对应该列的值都应不同。每个表只能有一个主键。

现在创建一个名为children的表,它为每个孩子存储一个唯一的数字、名和年龄。把孩子的编号作为主键:

CREATE TABLE children(

children INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,

fname VARCHAR(30),

age INTEGER

);

注意,与大多数程序设计语言不同,列名children出现在列数据类型之前。

还可以使用另外一种语法将列定义和主键定义分开:

mysql> use rick

mysql> CREATE TABLE children(

childno INTEGER AUTO_INCREMENT NOT NULL,

fname varchar(30),

age INTEGER,

PRIMARY KEY(childno)

);

MySQL用->提示符表示位于延续的行上。使用分号结束SQL命令,表示已经完成输入并准备好让数据库处理请求。

如果出现了错误,MySQL允许回退到之前的命令,编辑它并通过按下回车键重新输入它。

现在向表中添加数据,使用SQL命令INSERT来添加数据,因为定义childno列为AUTO_INCRMENT列,所以不需要为此列提供数据,只需让MySQL分配一个唯一的数字。

mysql> INSERT INTO children(fname, age) VALUES("Jenny", 21);

mysql> INSERT INTO children(fname, age) VALUES("Andrew", 17);

使用SELECT从表中提取数据来检查数据是否被正确添加:

mysql> SELECT childno, fanme, age FROM children;

与明确的列出想选择的列相比,也可以使用*号代表列,这将列出表中的所有列。这对交互式的使用很方便。但是在产品代码中,应该始终明确地指定想要选择的列。

启动一个对数据库服务器的交互式会话,并切换到rick数据库。然后,输入SQL命令创建表,使用满足需要的行来创建列。一旦使用分号结束了SQL命令,MySQL就将创建表。使用INSERT语句添加数据到新表中,允许childno列被自动分配数字。最后,使用SELECT来显示表中的数据。

时间: 2024-08-02 15:14:22

linux程序设计——MySQL管理(第八章)的相关文章

linux程序设计——MySQL管理

8.2 MySQL管理 包含MySQL发行版中的一些有用的工具程序使管理工作变得更加容易,它们中最常用的是mysqladmin程序. 8.2.1 命令 除了mysqlshow命令以外,所有的MySQL命令都接受下面的3个标准参数. 命令选项    参数    说明 -u          用户名  在默认情况下,mysql工具会尝试把当前linux的用户名作为MySQL的用户名,-u参数可以指定不同的用户名. -p          密码    如果给出了-p参数但是未提供密码,系统会提示输入密

菜鸟的《Linux程序设计》学习(8):MySQL数据库安装、配置及基本操作

1. MySQL数据库: 在涉及到一些大型的Web系统或者嵌入式软件的开发时,都少不了用数据库来管理数据.在Windows操作系统下,使用过各种各样的数据库,如:sqlServer.Oracle.MySQL等等,我们知道,在Windows系统上的软件安装配置都是界面式,操作明显而简捷. 那么在Linux操作系统上,对于数据库的选用,好像首推的是MySQL,它是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保

Linux 程序设计学习笔记----进程管理与程序开发(下)

转载请注明出处:http://blog.csdn.net/suool/article/details/38419983,谢谢! 进程管理及其控制 创建进程 fork()函数 函数说明具体参见:http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html 返回值:Upon successful completion, fork() shall return 0 to the child process and shall re

Linux 程序设计学习笔记----POSIX 文件及目录管理

转载请注明:http://blog.csdn.net/suool/article/details/38141047 问题引入 文件流和文件描述符的区别 上节讲到ANSI C 库函数的实现在用户态,流的相应资源也在用户空间,但无论如何实现最终都需要通过内核实现对文件的读写控制.因此fopen函数必然调用了对OS的系统调用.这一调用在LINUX下即为open, close, read, write等函数.这些都遵循POSIX标准. so,在linux系统中是如何通过POSIX标准实现对文件的操作和目

6)Linux程序设计入门--消息管理

6)Linux程序设计入门--消息管理 前言:Linux下的进程通信(IPC) Linux下的进程通信(IPC) POSIX无名信号量 System V信号量 System V消息队列 System V共享内存 1.POSIX无名信号量 如果你学习过操作系统,那么肯定熟悉PV操作了.PV操作是原子 操作.也就是操作是不可以中断的,在一定的时间内,只能够有一个进程的代码在CPU上面 执行.在系统当中,有时候为了顺利的使用和保护共享资源,大家提出了信号的概念. 假设 我们要使用一台打印机,如果在同一

Linux 程序设计学习笔记----Linux下文件类型和属性管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件属性存储结构体Inode的成员变量i_mode存储着该文件的文件类型和权限信息.该变量为short int类型. 这个16位变量的各个位功能划分为: 第0-8位为权限位,为别对应拥有者(user),同组其他用户(group)和其他用户(other)的读R写W和执行X权限. 第9-11位是权限修饰位,

linux下mysql Insert update delete 事务 用户管理

linux下mysql Insert update delete  事务 用户管理 1.INSERT插入语句格式: INSERT INTO tb_name (字段1, 字段2, ...) VALUES (值1,值2, ...)[,(值1, 值2, ...),...]; INSERT INTO 表名 SET 字段1=值1,字段2=值2,...; INSERT INTO 表名 (字段1,字段2,...) SELECT (字段1,字段2,...) FROM 表名 [WHERE 条件]; 2.REPLA

linux下mysql的用户管理及访问问题

1.mysql的安装配置 linux下有一个很神奇的东西叫yum,只要有源,用yum来安装是一件非常容易的事,什么都不用管,它会为你解决好一些软件依赖的问题.一键安装mysql: [[email protected] ~]# yum install mysql-server mysql-devel 安装完成后我们就可以使用mysql了: [[email protected] ~]# /etc/init.d/mysqld start Starting mysqld: [ OK ] [[email 

linux下mysql数据库 模型, 管理表 索引

1.linux下mysql数据库及其模型 1.1.SHOW TABLE STATUS LIKE 'user'\G   #查看表的存储引擎 SHOW ENGINES;   #查看数据库支持的存储引擎 客户端工具:mysql.mysqladmin.mysqldump.mysqlimport.mysqlcheck 服务器端工具:mysqld, mysqld_safe, mysqld_multi 1.2.my.cnf检查顺序: /etc/my.cnf --> /etc/mysql/my.cnf -->