如何创建MariaDB用户帐户并授予权限
MariaDB是一个开源MySQL项目,功能更加改进。
它与MySQL高度兼容,它可以被视为对MySQL的替代品。
所有客户端库,客户端 - 服务器协议,SQL语言,MySQL复制,主从配置等与MySQL非常相似。
在本教程中,我将解释一些基本的MariaDB命令,如创建用户,在MariaDB中创建一个数据库。
这包括用于数据操纵,存储和其他事务的命令的重要列表。
1)创建新的MariaDB用户帐户
此语句创建新的MariaDB帐户。
要使用此命令,我们必须具有全局创建用户权限或者MySQL数据库的Insert Privilege。
对于每个帐户,创建用户在mysql.user表中创建一个新的行,该表没有权限。
该帐户可以给出一个密码,其中包含可选的标识。
要在纯文本中指定密码,可以省略密码关键字。
要将密码指定为密码函数返回的哈希值,请包括密码关键字。
如果未使用标识的by子句指定密码,则用户将能够在没有密码的情况下连接。
空白密码不是通配符以匹配任何密码。
如果未设置密码,则用户必须连接而不提供密码。
Syntax : CREATE [OR REPLACE] USER [IF NOT EXISTS] user_specification [,user_specification] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH resource_option [resource_option] ...]
user_specification: user [ IDENTIFIED BY [PASSWORD] 'password' | IDENTIFIED WITH auth_plugin [AS 'auth_string'] ] ssl_option: SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject' with_option: GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count
要使用授权,我们必须具有授权选项权限,并且我们必须拥有我们授予的权限。
让我们看看如何使用纯密码添加用户,并为此分配了一些资源限制。
MariaDB [(none)]> create user saheadmin identified by 'password'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT USAGE ON *.* TO 'saheadmin'@'localhost' WITH MAX_QUERIES_PER_HOUR 90; Query OK, 0 rows affected (0.00 sec)
2)授予权限
授权语句授予MySQL用户帐户的权限。
Grant还用于指定其他帐户特征,例如使用安全连接和限制对服务器资源的限制。
要使用授权,我们必须具有授权选项权限,并且我们必须拥有我们授予的权限。
通常,数据库管理员首先使用创建用户创建一个帐户,然后授予授予其权限和特征。
例如:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; GRANT ALL ON db1.* TO 'jeffrey'@'localhost'; GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost'; GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
Revoke语句与授权有关,并使管理员能够删除帐户权限。
从MySQL程序成功执行时,授予查询OK的响应,影响了0行。
要确定操作中是否产生了哪些特权,请使用显示授权。
有不同的权限级别可以使用授权选项设置。
请参阅以下详细信息:
特权可以全局设置,用于整个数据库,用于表格,或者表中的单个列。
某些特权只能设置在某些级别。
全局权限使用* for priv_level授予。
全局权限包括管理数据库和管理用户帐户的权限,以及所有表,函数和过程的权限。
全局权限存储在MySQL.User表中。
使用DB_NAME授予数据库权限。
- for priv_level,或者仅使用*使用默认数据库。
数据库权限包括创建表和函数的权限,以及数据库中的所有表,函数和过程的权限。
数据库权限存储在mysql.db表中。
表权限是使用db_name.tbl_name for priv_level或者使用tbl_name授予的,以在默认数据库中指定表。
表关键字是可选的。
表权限包括在表中选择和更改数据的功能。
可以为单个列授予某些表权限。
通过为Priv_Level指定表并在权限类型之后提供列列表来授予列权限。
它们允许我们准确控制表格用户中哪个列可以选择和更改。
使用函数db_name.routine_name for priv_level或者仅使用function ratine_name授予函数权限,以指定默认数据库中的函数。
过程权限使用priv_level的步骤db_name.routine_name授予授权,或者使用步骤例程_name指定默认数据库中的过程。
我们可以使用示例获取此手册以获取更多选项。
3)删除用户
此语句删除了一个或者多个Mariadb帐户。
它删除了来自所有授予表的帐户的权限行。
要使用此语句,我们必须具有全局创建用户权限或者MySQL数据库的删除权限。
每个帐户使用与创建用户语句相同的格式命名。
MariaDB [mysql]> drop user saheadmin; Query OK, 0 rows affected (0.00 sec)
4)重命名用户
这可用于重命名MariaDB帐户。
Syntax : RENAME USER old_user TO new_user [, old_user TO new_user] ...
我创造了两个用户,即Vicky A&Sara并将其重命名为Vik和Sarah。
修改后,我们可以在MySQL用户表中确认其状态。
MariaDB [mysql]> rename user 'vicky' to 'vik'@'localhost', 'sara' to 'sarah'@'localhost'; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> use mysql; select * from user;
5)设置密码
此语句将密码分配给现有MariaDB用户帐户。
可以使用password()或者old_password()函数指定密码。
我们可以在使用这些函数时提供密码的字面文本。
如果在不使用任一函数的情况下指定了密码,则密码应该是密码()返回的已被加密的密码值。
Old_Password()应该只用于非常旧的MySQL/Mariadb版本(<4.0.0)。
MariaDB [(none)]> set password for 'saheadmin'@'localhost' = Password('sahe123'); Query OK, 0 rows affected (0.00 sec)
密码()函数返回41字符串哈希。
6)创建角色
此语句用于创建一个或者多个MariaDB角色。
我们需要为此目的才能创建全局创建用户并插入权限。
在添加角色时,将新列添加到MySQL.USER表中,没有权限,并且将相应的IS_ROLE字段设置为Y.我们需要登录特权用户并运行此命令以创建首选角色。
Syntax : CREATE [OR REPLACE] ROLE [IF NOT EXISTS] role [WITH ADMIN {CURRENT_USER | CURRENT_ROLE | user | role}] MariaDB [(none)]> create role admin; Query OK, 0 rows affected (0.00 sec)
使用管理选项:
带管理子句的可选确定当前用户/角色或者其他用户/角色是否具有新创建的角色。
默认情况下,它需要管理员current_user,这意味着当前用户将能够向用户授予此角色。
MariaDB [(none)]> create role sysadmin with admin saheadmin; Query OK, 0 rows affected (0.01 sec)
7)下降作用
此语句用于从服务器中删除一个或者多个MariaDB角色。
它不会删除或者禁用具有设置角色使用的用户的先前分配的角色。
因此,如果随后重新创建并授予角色,它将再次使用它作为用户的默认值。
我们需要使用MySQL User.Table完全删除默认角色的记录,使用Set Role None。
MariaDB [(none)]> drop role supportadmin; Query OK, 0 rows affected (0.01 sec)
8)设置角色
此语句使其具有当前会话的所有权限以及所有权限。
我为我的一个用户'saheadmin'创建了一个角色,并为该用户提供权限来管理角色。
root@theitroad-mariadb:~# mysql -u saheadmin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 76 Server version: 10.0.27-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04 Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> set role sysadmin; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> select current_role; +--------------+ | current_role | +--------------+ | sysadmin | +--------------+ 1 row in set (0.00 sec)
要从整个服务器中删除特定的角色,我们需要使用drop角色'rolename'与set角色'none'一起使用。
这将明确地从服务器中删除角色。
MariaDB [(none)]> set role none; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> select current_role; +--------------+ | current_role | +--------------+ | NULL | +--------------+
9)显示授权
此语句列出了添加到用户/角色的授权语句或者权限。
MariaDB [(none)]> show grants for 'saheadmin'@'localhost'; +-----------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for saheadmin@localhost | +-----------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'saheadmin'@'localhost' IDENTIFIED BY PASSWORD '*2DDFCC8B407A5C3798347782FC76BF0367586AD5' WITH MAX_QUERIES_PER_HOUR 90 | +-----------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> show grants for saheadmin; +-----------------------------------------------------+ | Grants for saheadmin@% | +-----------------------------------------------------+ | GRANT sysadmin TO 'saheadmin'@'%' WITH ADMIN OPTION | | GRANT USAGE ON *.* TO 'saheadmin'@'%' | +-----------------------------------------------------+ 2 rows in set (0.00 sec)
它也可用于查看授予角色的权限。
这就是我们如何为角色查看授权权限。
MariaDB [(none)]> show grants for sysadmin; +----------------------------------+ | Grants for sysadmin | +----------------------------------+ | GRANT USAGE ON *.* TO 'sysadmin' | +----------------------------------+ 1 row in set (0.00 sec)
10)创建数据库
这将创建具有给定名称的数据库。
我们可以使用子句(如果存在/如果不存在这些命令)以在执行时将警告返回警告而不是错误。
MariaDB [(none)]> CREATE DATABASE docker; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS docker; Query OK, 1 row affected, 1 warning (0.00 sec) MariaDB [(none)]> show warnings; +-------+------+-------------------------------------------------+ | Level | Code | Message | +-------+------+-------------------------------------------------+ | Note | 1007 | Can't create database 'docker'; database exists | +-------+------+-------------------------------------------------+ 1 row in set (0.00 sec)
11)删除数据库
这会删除数据库中的所有表并删除数据库。
删除数据库时,数据库上的用户权限不会自动删除。
MariaDB [(none)]> drop database docker; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> drop database docker; ERROR 1008 (HY000): Can't drop database 'docker'; database doesn't exist
12)使用"使用"选择数据库
这用于为后续语句选择一个数据库。
在执行下一个使用语句之前,数据库保持相同。
Syntax USE db_name; MariaDB [(none)]> use docker; Database changed
13)创建表
它用于创建一个新表,我们可以其中存储数据库内的实际数据。
MariaDB [docker]> create table t1 (a int check(a>0) ,b int check (b> 0), constraint abc check (a>b)); Query OK, 0 rows affected (0.01 sec)
14)改变表
它使我们可以更改现有表的结构。
我们可以使用此命令修改现有表。
我们可以使用此添加/删除列,更改现有列或者重命名列或者表本身的类型。
它可以强迫MariaDB重新构建表格。
我们可以查看此示例,其中我们正在将表引擎从InnoDB更改为Myisam
MariaDB [docker]> show table status; +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+--------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+--------------------+----------+----------------+---------+ | t1 | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 0 | NULL | 2015-10-31 06:49:41 | NULL | NULL | utf8mb4_general_ci | NULL | | | +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+--------------------+----------+----------------+---------+ 1 row in set (0.01 sec) MariaDB [docker]> ALTER TABLE t1 ENGINE = MyISAM; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [docker]> show table status; +------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+ | t1 | MyISAM | 10 | Fixed | 0 | 0 | 0 | 2533274790395903 | 1024 | 0 | NULL | 2015-10-31 08:23:25 | 2015-10-31 08:23:25 | NULL | utf8mb4_general_ci | NULL | | | +------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+ 1 row in set (0.00 sec)
15)掉落表
删除一个或者多个表。
删除表时,表上的用户权限不会自动删除。
Syntax : drop table table_name; MariaDB [docker]> drop table t2, t3; Query OK, 0 rows affected (0.02 sec)
16)描述
它提供有关表中列的信息。
这将显示有关表的完整信息,包括在每列中输入的数据。
它是显示列的快捷方式。
Syntax: {DESCRIBE | DESC} tbl_name [col_name | wild] MariaDB [mydatabase]> desc mytable; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+--
17)插入
此语句将新行插入现有表中。
让我们创建一个名为"产品"的表,并将一些数据插入其中。
MariaDB [mydatabase]> CREATE TABLE IF NOT EXISTS products ( -> productID INT UNSIGNED NOT NULL AUTO_INCREMENT, -> productCode CHAR(3) NOT NULL DEFAULT '', -> name VARCHAR(30) NOT NULL DEFAULT '', -> quantity INT UNSIGNED NOT NULL DEFAULT 0, -> price DECIMAL(7,2) NOT NULL DEFAULT 99999.99, -> PRIMARY KEY (productID) -> ); Query OK, 0 rows affected (0.01 sec)
首先,使用列值将数据插入第一行。
MariaDB [mydatabase]> INSERT INTO products VALUES (1001, 'PEN', 'Pen Red', 5000, 1.23); Query OK, 1 row affected (0.00 sec)
我们可以在一个语句中插入多个行值,如下所示。
MariaDB [mydatabase]> INSERT INTO products VALUES -> (NULL, 'PEN', 'Pen Blue', 8000, 1.25), -> (NULL, 'PEN', 'Pen Black', 2000, 1.25); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
向Auto_increment列添加Null值将导致最大值+1.
我们甚至可以使用此将值插入特定列。
auto_increment列的缺失条目将自动为计数添加+1值。
MariaDB [mydatabase]> INSERT INTO products (productCode, name, quantity, price) VALUES -> ('PEC', 'Pencil 2B', 10000, 0.48), -> ('PEC', 'Pencil 2H', 8000, 0.49); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
在将值插入指定列的同时,将填充缺少条目的默认值。
查看上次产品的条目。
MariaDB [mydatabase]> INSERT INTO products (productCode, name) VALUES ('PEC', 'Pencil HB'); Query OK, 1 row affected (0.00 sec)
我们可以查看以下表格内容:
MariaDB [mydatabase]> SELECT * FROM products; +-----------+-------------+-----------+----------+----------+ | productID | productCode | name | quantity | price | +-----------+-------------+-----------+----------+----------+ | 1001 | PEN | Pen Red | 5000 | 1.23 | | 1002 | PEN | Pen Blue | 8000 | 1.25 | | 1003 | PEN | Pen Black | 2000 | 1.25 | | 1004 | PEC | Pencil 2B | 10000 | 0.48 | | 1005 | PEC | Pencil 2H | 8000 | 0.49 | | 1006 | PEC | Pencil HB | 0 | 99999.99 | +-----------+-------------+-----------+----------+----------+ 6 rows in set (0.00 sec) MariaDB [mydatabase]>
我们甚至可以使用以下语句删除不需要的行内容:
MariaDB [mydatabase]> delete from products where productID = 1006; Query OK, 1 row affected (0.01 sec) MariaDB [mydatabase]> SELECT * FROM products; +-----------+-------------+-----------+----------+-------+ | productID | productCode | name | quantity | price | +-----------+-------------+-----------+----------+-------+ | 1001 | PEN | Pen Red | 5000 | 1.23 | | 1002 | PEN | Pen Blue | 8000 | 1.25 | | 1003 | PEN | Pen Black | 2000 | 1.25 | | 1004 | PEC | Pencil 2B | 10000 | 0.48 | | 1005 | PEC | Pencil 2H | 8000 | 0.49 | +-----------+-------------+-----------+----------+-------+ 5 rows in set (0.00 sec)
帮助命令
"帮助"命令可用于任何MariaDB客户端,以获取基本语法帮助以及大多数命令和函数的简短描述。
我们可以使用帮助内容来查看帮助类别列表。
MariaDB [mydatabase]> help contents; You asked for help about help category: "Contents" For more information, type 'help <item>', where <item> is one of the following categories: Account Management Administration Compound Statements Data Definition Data Manipulation Data Types Functions ........ MariaDB [mydatabase]> help Account Management; You asked for help about help category: "Account Management" For more information, type 'help <item>', where <item> is one of the following topics: CREATE USER DROP USER GRANT RENAME USER REVOKE SET PASSWORD
我们甚至可以寻求帮助搜索特定字符串,如创建或者授予。
它将提供有关该SQL命令使用情况的完整教程。
MariaDB [mydatabase]> help create; Many help items for your request exist. To make a more specific request, please type 'help <item>', where <item> is one of the following topics: CREATE DATABASE CREATE EVENT CREATE FUNCTION CREATE FUNCTION UDF CREATE INDEX CREATE PROCEDURE CREATE SERVER CREATE TABLE ......... MariaDB [mydatabase]> help CREATE DATABASE; Name: 'CREATE DATABASE' Description: Syntax: CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ...