LINUX

Cómo crear cuentas de usuarios de Mariadb y otorgar privilegios

MariaDB es un proyecto MySQL de código abierto con características más mejoradas. Es altamente compatible con MySQL y puede considerarse como un reemplazo directo de MySQL. Todas las bibliotecas cliente, protocolos cliente-servidor, dialecto SQL, replicación de MySQL, configuración maestro-esclavo, etc. son bastante similares a MySQL.

En este tutorial, explicaré algunos de los comandos básicos de Mariadb, como crear un usuario, crear una base de datos en MariaDB. Esto incluye una lista importante de comandos que se utilizan para la manipulación de datos, el almacenamiento y otras transacciones.

1) Cree una nueva cuenta de usuario Mariadb

Esta declaración crea nuevas cuentas MariaDB. Para usar este comando, debe tener el privilegio global CREATE USER o el privilegio INSERT para la base de datos mysql. Para cada cuenta, CREAR USUARIO crea una nueva fila en la tabla mysql.user que no tiene privilegios.

La cuenta puede recibir una contraseña con la cláusula opcional IDENTIFIED BY. Para especificar la contraseña en texto sin formato, puede omitir la palabra clave PASSWORD. Para especificar la contraseña como el valor hash devuelto por la función PASSWORD, incluya la palabra clave PASSWORD.

Si no especifica una contraseña con la cláusula IDENTIFIED BY, el usuario podrá conectarse sin contraseña. Una contraseña en blanco no es un comodín para coincidir con ninguna contraseña. El usuario debe conectarse sin proporcionar una contraseña si no se establece ninguna contraseña.

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

Para usar GRANT, debe tener el privilegio GRANT OPTION y debe tener los privilegios que está otorgando. Veamos cómo agregué un usuario con una contraseña simple y le asigné un límite de recursos.

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) Otorgar privilegios

La declaración GRANT otorga privilegios a las cuentas de usuario de MySQL. GRANT también sirve para especificar otras características de la cuenta, como el uso de conexiones seguras y los límites de acceso a los recursos del servidor. Usar
GRANT, debe tener el privilegio GRANT OPTION y debe tener los privilegios que está otorgando.

Normalmente, un administrador de base de datos primero usa CREAR USUARIO para crear una cuenta, luego GRANT para definir sus privilegios y características. Por ejemplo:

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;

La declaración REVOKE está relacionada con GRANT y permite a los administradores eliminar los privilegios de la cuenta.

Cuando se ejecuta con éxito desde el programa mysql, GRANT responde con Consulta OK, 0 filas afectadas. Para determinar qué privilegios resultan de la operación, use SHOW GRANTS.

Hay diferentes niveles de privilegios que se pueden configurar mediante la opción GRANT. Consulte los detalles a continuación:

Los privilegios se pueden establecer globalmente, para una base de datos completa, para una tabla o para columnas individuales en una tabla. Ciertos privilegios solo se pueden establecer en ciertos niveles.

Privilegios globales se otorgan usando *. * para priv_level. Los privilegios globales incluyen privilegios para administrar la base de datos y administrar cuentas de usuario, así como privilegios para todas las tablas, funciones y procedimientos. Los privilegios globales se almacenan en la tabla mysql.user.

Privilegios de la base de datos se otorgan usando db_name. * para priv_level, o usando solo * para usar la base de datos predeterminada. Los privilegios de la base de datos incluyen privilegios para crear tablas y funciones, así como privilegios para todas las tablas, funciones y procedimientos de la base de datos. Los privilegios de la base de datos se almacenan en la tabla mysql.db.

Privilegios de mesa se otorgan usando db_name.tbl_name para priv_level o usando solo tbl_name para especificar una tabla en la base de datos predeterminada. La palabra clave TABLE es opcional. Los privilegios de la tabla incluyen la capacidad de seleccionar y cambiar datos en la tabla. Se pueden otorgar ciertos privilegios de tabla para columnas individuales.

Privilegios de columna se otorgan especificando una tabla para priv_level y proporcionando una lista de columnas después del tipo de privilegio. Le permiten controlar exactamente qué columnas de la tabla pueden seleccionar y cambiar los usuarios.

Privilegios de función se otorgan usando FUNCTION db_name.routine_name para priv_level, o usando solo FUNCTION nombre_rutina para especificar una función en la base de datos predeterminada.

Privilegios de procedimiento se otorgan usando PROCEDURE nombre_bd.nombre_rutina para nivel_priv, o usando solo PROCEDURE nombre_rutina para especificar un procedimiento en la base de datos predeterminada.

Puedes referir esto Manual para más opciones con ejemplos.

3) Eliminar usuario

Esta declaración elimina una o más cuentas MariaDB. Elimina las filas de privilegios de la cuenta de todas las tablas de concesión. Para utilizar esta declaración, debe tener el privilegio global CREATE USER o el privilegio DELETE para la base de datos mysql. Cada cuenta se nombra usando el mismo formato que para la declaración CREATE USER.

MariaDB [mysql]> drop user saheadmin;
Query OK, 0 rows affected (0.00 sec)

4) Cambiar el nombre de un usuario

Esto se puede utilizar para cambiar el nombre de una cuenta MariaDB.

Syntax :

RENAME USER old_user TO new_user
[, old_user TO new_user] ...

Creé dos usuarios, a saber, Vicky a & Sara y los renombré a Vik y Sarah. Una vez modificado, podemos confirmar su estado en las tablas de usuario de 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) Establecer contraseña

Esta declaración asigna una contraseña a una cuenta de usuario de MariaDB existente. La contraseña se puede especificar usando la función PASSWORD () o OLD_PASSWORD (). Podemos dar el texto literal de la contraseña como tal al usar estas funciones. Si la contraseña se especifica sin usar ninguna de las funciones, la contraseña debe ser el valor de contraseña ya cifrado como lo devuelve PASSWORD (). OLD_PASSWORD () solo debe usarse para versiones muy antiguas de MySQL / MariaDB (<4.0.0).

MariaDB [(none)]> set password for 'saheadmin'@'localhost' = Password('sahe123');
Query OK, 0 rows affected (0.00 sec)

La función PASSWORD () devuelve un hash de 41 cadenas.

6) Crear rol

Esta declaración se usa para crear uno o más roles MariaDB. Debe tener el privilegio de inserción y de usuario de creación global para este propósito. Al agregar un rol, se agrega una nueva columna a la tabla MySQL.user sin privilegios, y con el campo is_role correspondiente establecido en Y. Necesitamos iniciar sesión con un usuario privilegiado y ejecutar este comando para crear su rol preferido.

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)

Con la opción de administrador:

La cláusula WITH ADMIN opcional determina si el usuario / rol actual u otro usuario / rol tiene uso del rol recién creado. De forma predeterminada, toma WITH ADMIN CURRENT_USER, lo que significa que el usuario actual podrá CONCEDER este rol a los usuarios.

MariaDB [(none)]> create role sysadmin with admin saheadmin;
Query OK, 0 rows affected (0.01 sec)

7) Desechar el papel

Esta declaración se utiliza para eliminar uno o más roles de MariaDB del servidor. No eliminará ni deshabilitará una función previamente asignada a un usuario con el uso de SET ROLE. Por lo tanto, si el rol se vuelve a crear y conceder posteriormente, se volverá a utilizar como predeterminado del usuario. Necesitamos eliminar completamente el registro del rol predeterminado de mysql user.table usando SET ROLE NONE.

MariaDB [(none)]> drop role supportadmin;
Query OK, 0 rows affected (0.01 sec)

8) Establecer rol

Esta declaración habilita un rol, junto con todos sus permisos, para la sesión actual. Creé un rol para uno de mis usuarios ‘saheadmin’ y le otorgo privilegios para que ese usuario administre el rol.

root@linoxide-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, 2016, 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)

Para eliminar un rol en particular del servidor en su conjunto, necesitamos usar el rol de eliminación ‘nombre de rol’ junto con el rol establecido ‘ninguno’. Esto eliminará explícitamente un rol del servidor.

MariaDB [(none)]> set role none;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select current_role;
+--------------+
| current_role |
+--------------+
| NULL |
+--------------+

9) Mostrar subvenciones

Esta declaración enumera las declaraciones GRANT o los privilegios agregados a los usuarios / roles.

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)

También se puede utilizar para ver los privilegios otorgados a un rol. Así es como podemos ver los privilegios de concesión de un rol.

MariaDB [(none)]> show grants for sysadmin;
+----------------------------------+
| Grants for sysadmin |
+----------------------------------+
| GRANT USAGE ON *.* TO 'sysadmin' |
+----------------------------------+
1 row in set (0.00 sec)

10) Crear base de datos

Esto crea una base de datos con el nombre de pila. Podemos usar la cláusula SI EXISTE / SI NO EXISTE con este comando para devolver advertencias con detalles en lugar de errores durante la ejecución.

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) Eliminar base de datos

Esto elimina todas las tablas de la base de datos y elimina la base de datos. Cuando se elimina una base de datos, los privilegios de usuario en la base de datos no se eliminan automáticamente.

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) Seleccione la base de datos usando ‘USE’

Se utiliza para seleccionar una base de datos para declaraciones posteriores. La base de datos permanece igual hasta que se ejecuta una siguiente instrucción de uso.

Syntax USE db_name;

MariaDB [(none)]> use docker;
Database changed

13) Crear tabla

Se utiliza para crear una nueva tabla, donde almacena sus datos reales dentro de la base de datos.

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) Modificar tabla

Le permite cambiar la estructura de una tabla existente. Podemos modificar su tabla existente usando este comando. Puede agregar / eliminar columnas, crear / destruir índices, cambiar el tipo de columnas existentes o cambiar el nombre de las columnas o de la tabla usando esto. Puede obligar a MariaDB a reconstruir la tabla. Puede ver este ejemplo en el que estamos modificando el motor de tablas de InnoDB a 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 | 2016-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 | 2016-10-31 08:23:25 | 2016-10-31 08:23:25 | NULL | utf8mb4_general_ci | NULL | | |
+------+--------+---------+------------+------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
1 row in set (0.00 sec)

15) Mesa de caída

Elimina una o más tablas. Cuando se elimina una mesa, los privilegios de usuario sobre la mesa no se eliminan automáticamente.

Syntax : drop table table_name;

MariaDB [docker]> drop table t2, t3;
Query OK, 0 rows affected (0.02 sec)

16) Describe

Proporciona información sobre las columnas de una tabla. Esto muestra información completa sobre una tabla que incluye los datos ingresados ​​en cada columna. Es un atajo para MOSTRAR COLUMNAS DE.

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) Insertar

Esta declaración inserta nuevas filas en una tabla existente. Creemos una tabla llamada «productos» e insertemos algunos datos en ella.

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)

Primero, inserte los datos en la primera fila con los valores de la columna.

MariaDB [mydatabase]> INSERT INTO products VALUES (1001, 'PEN', 'Pen Red', 5000, 1.23);
Query OK, 1 row affected (0.00 sec)

Podemos insertar varios valores de fila en una declaración como se muestra a continuación.

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

Agregar valores nulos a una columna auto_increment dará como resultado un valor máximo de +1. Incluso podemos insertar valores en una columna específica usando esto. Una entrada faltante para una columna auto_increment agregará automáticamente un valor +1 al recuento.

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

Al insertar valores en una columna especificada, las entradas faltantes se completarán con su valor predeterminado. Consulte la entrada del último producto.

MariaDB [mydatabase]> INSERT INTO products (productCode, name) VALUES ('PEC', 'Pencil HB');
Query OK, 1 row affected (0.00 sec)

Podemos ver el contenido de nuestra tabla a continuación:

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]>

Incluso podemos eliminar un contenido de fila no deseado con esta declaración a continuación:

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)

Comando de ayuda

El comando «AYUDA» se puede utilizar en cualquier cliente MariaDB para obtener ayuda de sintaxis básica y una breve descripción de la mayoría de los comandos y funciones. Podemos utilizar los contenidos de ayuda para ver la lista de categorías de ayuda.

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

Incluso puede buscar ayuda para buscar una cadena en particular, como crear o otorgar. Proporcionará una guía completa sobre el uso de ese comando 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] ...

Conclusión

MariaDB se está volviendo mucho más popular que MySQL e incluso los fanáticos que no son de Oracle están reemplazando MySQL tan rápido como pueden. Este tutorial le dará un inicio rápido con MariaDB y lo hará sentir cómodo con los comandos de MariaDB. Puedes visitar MariaDB página oficial para conocer más opciones y usos de estos comandos. Espero que hayas disfrutado leyendo este artículo. Publique sus valiosos comentarios y sugerencias al respecto.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar