访问MySQL数据库
MySOL数据库系统也是一个典型的C/S(客户端/服务器)架构的应用,要访问MySOL数据库 需要使用专门的客户端软件,在Linux系统中,最简单、易用的MySQL.客户端软件是其自带的mysql 命令工具。
-
登录到MySQL服务器
经过安装后的初始化过程,MySOL数据库的默认管理员用户名为root,密码为空.
可以执行以下操作:
在有密码的情况下,还可以使用'-p'选项来进行密码效验。
-
执行MySQL操作语句
验证成功以后将会进入提示符为‘mysql>”的数据库操作环境,用户可以输入各种操作语句对 数据库进行管理.
每条MySQL操作语句以分号 ‘;’ 表示结束,输入时可以不区分大小写。
status; 查看当前数据库服务的基本信息
show databases; 用于查看当前MySOL服务器中包含的库,经初始化后的MySOL服务器,默认建立了四个库:test.mysql.information_schema和performance_schema(其中mysql库是mysql 正常运行所需的库,其中包含了用户认证相关的表),
执行show databases;可以进行查看到
show tables;用于查看当前所在的库中包含的表。在操作之前,需要先使用USE语句切换到所使用的库,例如,执行以下操作可以显示mysql库中包含的所有表
describe用于显示表的结构,即组成表的各字段(列)的信息.需要指定“库名.表名” 作为参数:若只指定表名参数,则需先通过USE语句切换到目标库。
例如.执行以下操作可以查看 mysql库中的user表的结构.与直接执行“DESCRIBE mysql.user:”语句的效果相同。
-
退出“mysql>” 操作环境
在“mysql>”操作环境中,执行“exit”或“quit”命令可以退出mysql命令工具.返回原来的 Shell环境.
创建及删除库和表
1.创建新的库
CREATEDATABASE语句:用于创建一个新的库,需指定数据库名称作为参数。例如,执行以下 操作可以创建一个名为auth的库.
刚创建的数据库是空的,其中不包含任何表,在/usr/local/mysql/data 目录下会自动生成一个 与新建的库名相同的文件夹。
2.创建新的表
CREATE TABLE 语句:用于在当前库中创建新的表,需指定数据表名称作为参数,并定义该表格 所使用的各字段,基本格式如下所示。
创建表之前,应先明确数据表格的结构、各字段的名称和类型等信息,例如,若要创建一个包含 用户名、密码字串的用户验证表,应先分析表格结构。
上述表格中,“用户名”为不超过16字节的字符串,不能为空;“密码字串”为不超过48个字 符的字符串(插入记录时使用MySOL的函数加密).默认值为空字串。考虑到字符集兼容性,最好 不要使用中文字段名,改用user_name,user_passwd分别表示用户名、密码字串,表格中不能拥有同 名的用户.因此可将 user_name作为主键。
针对上述分析结果,可以在auth库中按如下操作创建users表,其中,字段定义部分的DEFAULT 语句用于设置默认的密码字串,PRIMARY语句用于设置主键字段名。
3.删除一个数据表
DROP TABLE语句:用于删除库中的表,需要指定“库名.表名”作为参数:若只指定表名参数, 则需先通过执行“USE”语句切换到目标库,
例如,执行以下操作可以删除auth库中的users表。
4.删除一个数据库
DROP DATABASE语句:用于删除指定的库,需要指定库名作为参数,
例如,执行以下操作可以 删除名为auth的库.
管理表中的数据记录
1.插入数据记录
INSERT INTO语句:用于向表中插入新的数据记录,语句格式如下所示,
执行以下操作将会向 auth 库中的 users表插入一条记录:用户名为“zhangsan,对应的密码为 “123456”,需注意的是,VALUES部分的值应与前面指定的各字段逐一对应。
在插入新的数据记录时,如果这条记录完整包括表中所有字段的值,则插入语句中指定字段的 部分可以省略。例如,执行以下操作也可以向auth库中的user表插入一条新的记录:用户名为“lisi” 对应的密码为“654321“
2.查询数据记录
SELECT语句:用于从指定的表中查找符合条件的数据记录。MySOL数据库支持标准的SOL查询 语句,语句格式如下所示。
表示所有字段时,可以使用通配符“*”,若要显示所有的数据记录,则可以省略WHERE条件子 句.例如,执行以下操作可以查看auth库中users表内的所有数据记录,其中由于密码字串已加密 因此不会直接显示出实际的密码内容.
当需要根据特定的条件查找记录时,WHERE条件子句是必不可少的,例如,若要查找users表 中用户名为“zhangsan”的记录,显示其中用户名,密码字段的信息,可以执行以下操作。
3.修改数据记录
UPDATE语句:用于修改、更新表中的数据记录,语句格式如下所示。
执行以下操作可以修改users表中用户名为“lisi”的记录,将密码字串设为空值,验证记录内容 可以发现 lisi 用户的密码串值已变为空白。
在MySOL数据库服务器中,用于访问数据库的各种用户(如root)信息都保存在mysql库的user 表中,熟练的管理员可以直接修改其中的数据记录。例如,以下操作可以将数据库用户root的密码 设为“123457”,当再次使用“mysql-u root-p”访问MySOL数据库服务器时,必须使用此密码进 行验证。
若是在 Linux 命令行环境中执行,还可以使用mysqladmin 工具来设置密码,命令格式为 “mysqladmin-u root-p“旧密码password“新密码“.例如.执行以下操作可将数据库用户root 的密码设置为“123456”。
4.删除数据记录
DELETE语句:用于删除表中指定的数据记录。语句格式如下所示。
执行以下操作可以删除users表中用户名为“lisi”的数据记录,验证记录内容可以发现 lisi用户 的数据记录已经消失。
在MySOL数据库服务器中,默认添加了从本机访问数据库的来宾用户(user.password均为空). 基于数据库安全性考虑,应该删除这些来宾用户。执行以下操作显示user字段为空的用户记录,并用DELETE 语句进行该用户记录的删除。
先查看
有两个空用户记录
用DELETE语句删除该用户的记录
数据库用户授权
-
授予权限
GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将 会创建新的用户,否则,GRANT语句用于修改用户信息,语句格式如下所示,
> 权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update". 使用all”表示所有权限,可授权执行任何操作。
>库名.表名:用于指定授权操作的库和表的名称,其中可以使用通配符“*”.例如,使用 “auth.*”表示授权操作的对象为auth库中的所有表。
>用户名@来源地址:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里 连接。来源地址可以是域名,P地址,还可以使用“%”通配符,表示某个区域或网段内 的所有地址,如“%.bdqn.com”“192.168.1.%”等。
>DENTIFEDBY:用于设置用户连接数据库时所使用的密码字符串.在新建用户时,若省略 “IDENTIFEDBY”部分,则用户的密码将为空。
执行以下操作可以添加一个名为“xiaoqi”的数据库用户,并允许其从本机访问,对auth库中的 所有表具有查询权限,验证密码为“123456”.使用GRANT语句授权的用户记录,会保存到mysql 库的user、db,host、tables_priv等相关表中,无须刷新即可生效.
切换到其他Shell终端,以用户xiaoqi的身份连接数据库,当执行授权的数据库操作时将被允许, 而执行非授权的数据库操作时将被拒绝。例如,允许用户xiaoqi 查询auth 库中 users表的数据记录, 但禁止查询其他库中的表的记录。
在企业服务器的应用中,数据库与网站服务器有时候是相互独立的。因此在MySQL服务器中. 应根据实际情况创建新的用户授权,允许授权用户从网站服务器访问数据库。通常的做法是,创建 一个或几个网站专用的库,并授予所有权限,限制访问的来源P地址。例如,执行以下操作可以新 建bdqn库,并授权从IP地址为192.168.4.19的主机连接,用户名为“dbuser”.密码为“pwd@123”. 允许在bdqn库中执行所有操作。
-
查看权限
SHOWGRANTS语句:专门用来查看数据库用户的授权信息,通过FOR子句可指定查看的用户对象(必须与授权时使用的对象名称一致)语句格式如下所示。
执行以下操作可以查看用户dbuser从主机192.168.4.19访问数据库时的授权信息。其中USAGE 权限对应的授权记录中包含了用户的连接密码字串。
-
撤销权限
REVOKE语句:用于撤销指定用户的数据库权限,撤销权限后的用户仍然可以连接到MySOL服务 器,但将被禁止执行对应的数据库操作。语句格式如下所示。
执行以下操作可以撤销用户xiaoqi从本机访问数据库auth的所有权限。
实验案例:MySQL服务器的构建与维护
推荐步骤
编译安装MySQL数据库系统。
启动mysqld 服务,为root 用户设置密码,删除空用户。
创建bdon库,stuinfo表。
操作步骤
设置root用户密码为12357
mysql> update mysql.user set password=password('123457') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> flush privileges; //刷新用户授权信息
Query OK, 0 rows affected (0.00 sec)
删除密码为空的用户记录
mysql> delete from mysql.user where user='';
Query OK, 2 rows affected (0.00 sec)
新建bdqn库
mysql> create database bdqn;
Query OK, 1 row affected (0.01 sec)
添加一个名为'rundb'的数据用户,并允许其从本机访问,对bdqn库中的所有表具有所有权限,验证密码为'123456'。
mysql> grant all on bdqn.* to 'rundb'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
查询‘rundb’用户在本机的权限,权限为所有all
mysql> show grants for 'rundb'@'localhost';
+--------------------------------------------------------------------------------------------------------------+
| Grants for rundb@localhost |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'rundb'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `bdqn`.* TO 'rundb'@'localhost' |
+--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
以rundb用户登录数据库
[root@lgcllc ~]# mysql -urundb -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.36 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
接着在bdqn库建立stuinfo表
mysql> use bdqn;
Database changed
mysql> create table stuinfo (姓名 char(16) not null, 性别 char(5) not null, 年龄 varchar(3) not null, 联系电话 varchar(11) not null, 邮箱地址 char(50) not null);
Query OK, 0 rows affected (0.01 sec)
填入数据
mysql> insert into stuinfo values('张无忌','男','19','17512345678','wuji.zhang@mingchao.org');
Query OK, 1 row affected (0.00 sec)
mysql> insert into stuinfo values('白居易','男','24','17587654321','juyi.bai@tangchao.org');
Query OK, 1 row affected (0.00 sec)
mysql> insert into stuinfo values('蓝采和','女','21','17255201314','caihe.lan@wudaisong.org');
Query OK, 1 row affected (0.00 sec)
mysql> insert into stuinfo values('','','','',''); //添加了一行为空的数据
Query OK, 1 row affected (0.00 sec)
mysql> delete from stuinfo where 姓名=''; //删除为空的数据行
Query OK, 1 row affected (0.00 sec)
实验结果
select * from bdqn.stuinfo; 语句查看创建的stuinfo表