it-swarm.com.de

Wie erteile ich einem Schema, das von einem Benutzer in MySQL erstellt wurde, automatisch alle Berechtigungen?

Jemand ist neu in die Firma eingetreten und ich habe ein Konto für sie in MySQL erstellt, indem ich Folgendes verwendet habe:

CREATE USER 'username' IDENTIFIED BY 'password'

Sie muss ihr eigenes Schema erstellen und verwendet:

GRANT CREATE ON *.* TO username;

Das Problem ist, dass sie jetzt neue Schemas und Tabellen erstellen kann, aber nichts damit anfangen kann. Ich möchte, dass sie keinen Zugriff auf vorhandene Schemas/Tabellen hat, sondern ihre eigene Datenbank erstellen und alles damit machen kann. Ist das möglich?

7

So gewähren Sie mydb alle Berechtigungen in der Datenbank username

GRANT ALL PRIVILEGES ON mydb.* TO username;

So gewähren Sie Privilegien für eine Tabelle mydb.mytable bis username

GRANT ALL PRIVILEGES ON mydb.mytable TO username;

Ich schlage vor, dass Sie den Benutzer zuerst löschen, um alle serverweiten Berechtigungen zu löschen.

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

Warum den Benutzer zuerst fallen lassen? Wenn Sie zum ersten Mal einen Benutzer mit dem Namen username erstellen und sich anmelden, hat der Benutzername keine Berechtigungen. Renn einfach SHOW GRANTS; Es zu sehen. Es sollte so etwas wie GRANT USAGE ON *.* TO username. In diesem Moment kann sich username nur anmelden. Das ist Ihre Chance, Privilegien zu schaffen.

Wenn du läufst

GRANT ALL PRIVILEGES ON *.* TO username;

der Benutzername verfügt über globale Datenbankberechtigungen (alle Datenbanken).

Wenn du läufst

GRANT ALL PRIVILEGES ON mydb.* TO username;

der Benutzername verfügt nur über datenbankweite Berechtigungen für die Datenbank mydb.

Wenn du läufst

GRANT ALL PRIVILEGES ON mydb.mytable TO username;

der Benutzername verfügt nur über Tabellenberechtigungen für mydb.mytable.

Sie können sie nicht mischen. Wenn Sie dies tun, verlieren Sie versehentlich username Berechtigungen, die username nicht haben sollte.

Wenn Sie sehen möchten, welche Berechtigungen auf den drei Ebenen vorhanden sind, führen Sie die folgenden Abfragen aus

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;

Hier sind Privilegien für 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>

Führen Sie die Abfrage aus, um die Berechtigungen für 5.1 und 5.0 anzuzeigen

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 ;

Hoffe es hilft. Hoffe es hilft.

1
Sai prateek