13.4-13.6 MySQL用戶管理,常用語句
1 創建user1用戶
mysql> grant all on *.* to'user1'@'127.0.0.1' identified by '123456a';
Query OK, 0 rows affected (0.01 sec)
解釋:
grant all 所有的權限
*.*xx庫的xx表,如果是mysql庫的表可以表示為mysql.*
@'127.0.0.1'授權指定源ip連接。所有ip通配表示為@'%',%表示所有ip
2 利用user1連接MySQL
如果沒有指定ip連接,會出現以下報錯,因為mysql默認socket連接,而user1授權指定了ip連接。
[root@AliKvn ~]# mysql -uuser1 -p123456a
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
正確連接方式,
[root@AliKvn ~]# mysql -uuser1 -p123456a -h127.0.0.1
mysql>
2.1 授權localhost連接
利用root進入mysql修改,
[root@AliKvn ~]# mysql -uroot -paminglinux
mysql> grant all on *.* to'user1'@'localhost' identified by '123456a';
2.2 localhost相當於socket,所以在本機用user1連接mysql的話,直接連接
[root@AliKvn ~]# mysql -uuser1 -p123456a
mysql>
2.3 還可以針對性去設置用戶給予權限
mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.133.1' identified by 'passwd';
3 查看用戶的權限
查看當前用戶的權限
mysql> show grants
查看user1的權限
mysql> show grants for user1@'127.0.0.1';
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user1'@'127.0.0.1' IDENTIFIED BY PASSWORD '*B012E8731FF1DF44F3D8B26837708985278C3CED' |
+-----------------------------------------------------------------------------------------------------------------------+
3.1 添加user2,並針對指定權限
mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'172.18.171.157' identified by 'passwd';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user2@'172.18.171.157'
-> ;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'172.18.171.157' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0' |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'172.18.171.157' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
3.2 在不知道用戶密碼的時候給予同樣權限,例如給予172.18.171.158的user2.
我們復制即可show grants後的信息,更改IP地址172.18.171.158,然後再分別執行即可賦予同樣權限。
mysql> GRANT USAGE ON *.* TO 'user2'@'172.18.171.158' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDDF46B68F5C8B8F25762BCCEF0'
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'172.18.171.158';
Query OK, 0 rows affected (0.00 sec)
3.3 看158的用戶權限信息。
mysql> show grants for user2 @'172.18.171.158'
-> ;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user2'@'172.18.171.158' IDENTIFIED BY PASSWORD '*59C70DA2F3E3A5BDF46B68F5C8B8F25762BCCEF0' |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO 'user2'@'172.18.171.158' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
13.5 常用sql語句
1 查看MySQL庫裏的user表有多少行
select count(*) from mysql.user;
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
| 11 |
+----------+
1 row in set (0.00 sec)
count(*)表示表中共有多少行,此處是11行。
這個是用MyIsam 的engine,相對InnoDB會比較快
2 查看表裏所有的內容;
mysql> select * from mysql.db\G;
這裏的*這個是用InnoDB的Engine 會比較慢,所以要慎用
3 查詢單個或多個字段的數據
單個
select db from mysql.db;
mysql> select db from mysql.db;
+---------+
| db |
+---------+
| test |
| test\_% |
| db1 |
| db1 |
| db1 |
+---------+
5 rows in set (0.00 sec)
多個
select db,user from mysql.db;
mysql> select db,user from mysql.db;
+---------+-------+
| db | user |
+---------+-------+
| test | |
| test\_% | |
| db1 | user2 |
| db1 | user2 |
| db1 | user2 |
+---------+-------+
5 rows in set (0.00 sec)
4 模糊查詢
mysql> select * from mysql.db where host like '172.%.%';
可以利用\G整潔顯示
mysql> select * from mysql.db where host like '172.%.%'\G;
其中like就是起到了模糊匹配的作用
5 插入語句
db1.t1是一個空表,利用這個表測試。
mysql> desc db1.t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> select * from db1.t1;
Empty set (0.01 sec)
在db1.t1插入數據:兩個字段(第一個字段是id,第二個字段是name)
mysql> insert into db1.t1 values (1, 'abc');
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
+------+------+
1 row in set (0.00 sec)
可以看到已被插入2個字段,分別是1和abc.
插入數據的時候要註意,插入字符串最好加上'',數字可以不用加''。
mysql> insert into db1.t1 values (1,'234');
Query OK, 1 row affected (0.00 sec)
mysql> insert into db1.t1 values (1,234);
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
| 1 | 234 |
| 1 | 234 |
+------+------+
3 rows in set (0.00 sec)
5.1 更改表的某一行的數據
update db1.t1 set name='aaa' where id=1;
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 1 | aaa |
| 1 | aaa |
+------+------+
3 rows in set (0.01 sec)
更改db1.t1裏面匹配id=1 將name改成aaa值
5.2 同樣可以匹配name改id
mysql> update db1.t1 set id=2 where name='aaa';
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 2 | aaa |
| 2 | aaa |
| 2 | aaa |
+------+------+
3 rows in set (0.00 sec)
6 清空字段
mysql> delete from db1.t1 where id=2;
mysql> select * from db1.t1;
Empty set (0.00 sec)
6.1 清空表的內容,表結構保留
mysql>truncate table db1.t1;
mysql> desc db1.t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | char(40) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
6.2 完全刪除表
mysql>drop table db1.t1;
mysql> desc db1.t1;
ERROR 1146 (42S02): Table 'db1.t1' doesn't exist
6.3 幹掉數據庫
drop database db1;
mysql> drop database db1;
Query OK, 0 rows affected (0.00 sec)
mysql> use db1
ERROR 1049 (42000): Unknown database 'db1'
總結:
盡量在大數據庫,表少用*來查看內容。
慎用刪除功能。
13.4-13.6 MySQL用戶管理,常用語句