web-dev-qa-db-fra.com

Comment accorder automatiquement tous les privilèges à un schéma créé par un utilisateur dans mysql?

Quelqu'un de nouveau a rejoint l'entreprise et j'ai créé un compte pour elle dans mysql en utilisant les éléments suivants:

CREATE USER 'username' IDENTIFIED BY 'password'

Elle a besoin de créer son propre schéma et a donc utilisé:

GRANT CREATE ON *.* TO username;

Le problème est que maintenant elle est capable de créer de nouveaux schémas et tables mais qu'elle ne peut rien en faire. Je voudrais qu'elle n'ait pas accès aux schémas/tables existants mais qu'elle puisse créer sa propre base de données et faire quoi que ce soit avec. Est-ce possible?

7

Pour accorder tous les privilèges sur la base de données mydb à username

GRANT ALL PRIVILEGES ON mydb.* TO username;

Pour accorder des privilèges sur une table mydb.mytable à username

GRANT ALL PRIVILEGES ON mydb.mytable TO username;

Je vous suggère de supprimer d'abord l'utilisateur pour effacer tous les privilèges à l'échelle du serveur.

DROP USER username;
CREATE USER username;
GRANT ALL PRIVILEGES ON mydb.* TO username;

Pourquoi abandonner l'utilisateur en premier? Lorsque vous créez pour la première fois un utilisateur appelé username et que vous vous connectez, le nom d'utilisateur n'a pas de privilèges. Exécutez simplement SHOW GRANTS; voir ça. Il devrait dire quelque chose comme GRANT USAGE ON *.* TO username. À ce moment, username ne peut que se connecter. C'est votre chance de créer des privilèges.

Si vous courez

GRANT ALL PRIVILEGES ON *.* TO username;

le nom d'utilisateur aura des privilèges de base de données globaux (toutes les bases de données)

Si vous courez

GRANT ALL PRIVILEGES ON mydb.* TO username;

nom d'utilisateur aura des privilèges à l'échelle de la base de données sur la base de données mydb uniquement.

Si vous courez

GRANT ALL PRIVILEGES ON mydb.mytable TO username;

nom d'utilisateur aura des privilèges de table sur la table mydb.mytable uniquement.

Vous ne pouvez pas les mélanger. Si vous le faites, vous glissez accidentellement des privilèges username que username ne devrait pas avoir.

Si vous souhaitez voir quels privilèges existent aux trois niveaux, exécutez les requêtes suivantes

SELECT table_name,column_name
FROM information_schema.columns
WHERE table_schema='mysql'
AND table_name IN ('user','db','tables_priv')
AND column_name LIKE '%\_priv'
ORDER BY table_name,column_name;

Voici les privilèges pour MySQL 5.5

mysql> SELECT table_name,column_name
    -> FROM information_schema.columns
    -> WHERE table_schema='mysql'
    -> AND table_name IN ('user','db','tables_priv')
    -> AND column_name LIKE '%\_priv'
    -> ORDER BY table_name,column_name;
+-------------+------------------------+
| table_name  | column_name            |
+-------------+------------------------+
| db          | Alter_priv             |
| db          | Alter_routine_priv     |
| db          | Create_priv            |
| db          | Create_routine_priv    |
| db          | Create_tmp_table_priv  |
| db          | Create_view_priv       |
| db          | Delete_priv            |
| db          | Drop_priv              |
| db          | Event_priv             |
| db          | Execute_priv           |
| db          | Grant_priv             |
| db          | Index_priv             |
| db          | Insert_priv            |
| db          | Lock_tables_priv       |
| db          | References_priv        |
| db          | Select_priv            |
| db          | Show_view_priv         |
| db          | Trigger_priv           |
| db          | Update_priv            |
| tables_priv | Column_priv            |
| tables_priv | Table_priv             |
| user        | Alter_priv             |
| user        | Alter_routine_priv     |
| user        | Create_priv            |
| user        | Create_routine_priv    |
| user        | Create_tablespace_priv |
| user        | Create_tmp_table_priv  |
| user        | Create_user_priv       |
| user        | Create_view_priv       |
| user        | Delete_priv            |
| user        | Drop_priv              |
| user        | Event_priv             |
| user        | Execute_priv           |
| user        | File_priv              |
| user        | Grant_priv             |
| user        | Index_priv             |
| user        | Insert_priv            |
| user        | Lock_tables_priv       |
| user        | Process_priv           |
| user        | References_priv        |
| user        | Reload_priv            |
| user        | Repl_client_priv       |
| user        | Repl_slave_priv        |
| user        | Select_priv            |
| user        | Show_db_priv           |
| user        | Show_view_priv         |
| user        | Shutdown_priv          |
| user        | Super_priv             |
| user        | Trigger_priv           |
| user        | Update_priv            |
+-------------+------------------------+
50 rows in set (0.01 sec)

mysql>

Exécutez la requête pour voir les privilèges pour 5.1 et 5.0

6
RolandoMySQLDBA
CREATE TABLESPACE dwtblspc LOGGING DATAFILE 'D:\oraclexe\app\Oracle\oradata\XE\DWTBLSPC.DBF' SIZE 300M AUTOEXTEND ON NEXT 1048K MAXSIZE UNLIMITED;

CREATE USER prateek IDENTIFIED  by prateek DEFAULT TABLESPACE dwtblspc ACCOUNT UNLOCK;

GRANT unlimited tablespace to prateek ;

CREATE ROLE prateek_role;

GRANT CREATE SESSION,ALTER SESSION,CREATE TABLE,CREATE CLUSTER,CREATE SYNONYM,CREATE VIEW,CREATE SEQUENCE,
CREATE DATABASE LINK,CREATE PROCEDURE,CREATE TRIGGER,CREATE TYPE,CREATE OPERATOR,CREATE INDEXTYPE,BACKUP ANY TABLE,
SELECT ANY TABLE,CREATE ANY TABLE,CREATE ANY INDEX,ALTER ANY INDEX,ALTER ANY INDEXTYPE,DROP ANY INDEX,DROP ANY INDEXTYPE to prateek_role;

GRANT prateek_role to prateek ;

J'espère que cela vous aidera. J'espère que cela vous aidera.

1
Sai prateek