MySQL: Grant **all** privileges on database

后端 未结 11 1191
庸人自扰
庸人自扰 2020-11-22 09:23

I\'ve created database, for example \'mydb\'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER \'myuser\'@\'%\' IDENTIFIED BY PASSWORD          


        
相关标签:
11条回答
  • 2020-11-22 10:13

    I had this challenge when working on MySQL Ver 8.0.21

    I wanted to grant permissions of a database named my_app_db to the root user running on localhost host.

    But when I run the command:

    use my_app_db;
    
    GRANT ALL PRIVILEGES ON my_app_db.* TO 'root'@'localhost';
    

    I get the error:

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'my_app_db.* TO 'root'@'localhost'' at line 1>

    Here's how I fixed:

    Login to your MySQL console. You can change root to the user you want to login with:

    mysql -u root -p
    

    Enter your mysql root password

    Next, list out all the users and their host on the MySQL server. Unlike PostgreSQL this is often stored in the mysql database. So we need to select the mysql database first:

    use mysql;
    SELECT user, host FROM user;
    

    Note: if you don't run the use mysql, you get the no database selected error.

    This should give you an output of this sort:

    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | mysql.infoschema | localhost |
    | mysql.session    | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    +------------------+-----------+
    4 rows in set (0.00 sec)
    

    Next, based on the information gotten from the list, grant privileges to the user that you want. We will need to first select the database before granting permission to it. For me, I am using the root user that runs on the localhost host:

    use my_app_db;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
    

    Note: The GRANT ALL PRIVILEGES ON database_name.* TO 'root'@'localhost'; command may not work for modern versions of MySQL. Most modern versions of MyQL replace the database_name with * in the grant privileges command after you select the database that you want to use.

    You can then exit the MySQL console:

    exit
    

    That's it.

    I hope this helps

    0 讨论(0)
  • 2020-11-22 10:17

    This is old question but I don't think the accepted answer is safe. It's good for creating a super user but not good if you want to grant privileges on a single database.

    grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
    grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';
    

    % seems to not cover socket communications, that the localhost is for. WITH GRANT OPTION is only good for the super user, otherwise it is usually a security risk.

    Update for MySQL 5.7+ seems like this warns about:

    Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation.

    So setting password should be with separate commands. Thanks to comment from @scary-wombat.

    ALTER USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
    ALTER USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
    

    Hope this helps.

    0 讨论(0)
  • 2020-11-22 10:18

    To access from remote server to mydb database only

    GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'192.168.2.21';
    

    To access from remote server to all databases.

    GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.2.21';
    
    0 讨论(0)
  • 2020-11-22 10:19

     1. Create the database

    CREATE DATABASE db_name;
    

     2. Create the username for the database db_name

    GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
    

     3. Use the database

    USE db_name;
    

     4. Finally you are in database db_name and then execute the commands like create , select and insert operations.

    0 讨论(0)
  • 2020-11-22 10:22
    GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;
    

    This is how I create my "Super User" privileges (although I would normally specify a host).

    IMPORTANT NOTE

    While this answer can solve the problem of access, WITH GRANT OPTION creates a MySQL user that can edit the permissions of other users.

    The GRANT OPTION privilege enables you to give to other users or remove from other users those privileges that you yourself possess.

    For security reasons, you should not use this type of user account for any process that the public will have access to (i.e. a website). It is recommended that you create a user with only database privileges for that kind of use.

    0 讨论(0)
提交回复
热议问题