首页 文章

授予**数据库的所有**权限

提问于
浏览
556

我创建了数据库,例如'mydb' .

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

现在我可以从任何地方登录数据库,但无法创建表 .

如何授予该数据库和(将来)表的所有权限 . 我无法在'mydb'数据库中创建表 . 我总是得到:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'

10 回答

  • 13

    要授予数据库的所有权限: mydb 给用户: myuser ,只需执行:

    GRANT ALL ON mydb.* TO 'myuser'@'localhost';
    

    要么:

    GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
    

    PRIVILEGES 关键字不是必需的 .

    另外我不知道为什么其他答案表明 IDENTIFIED BY 'password' 被放在命令的末尾 . 我认为这不是必需的 .

  • 832

    我只能通过添加 GRANT OPTION 才能使其工作,而不会总是收到权限被拒绝错误

    GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' WITH GRANT OPTION;
    
  • 104

    1.创建数据库

    CREATE DATABASE db_name;
    

    2.为数据库db_name创建用户名

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

    3.使用数据库

    USE db_name;
    

    4.最后,您在数据库db_name中,然后执行create,select和insert操作等命令 .

  • 12
    GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY 'mypasswd';
    

    适用于架构的权限:)

    可选:在 mypasswd 之后你可以添加 WITH GRANT OPTION

  • 5
    GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;
    

    这就是我创建“超级用户”权限的方式(虽然我通常会指定一个主机) .

    重要说明

    虽然这个答案可以解决访问问题, WITH GRANT OPTION 创建了一个可以edit the permissions of other users的MySQL用户 .

    GRANT OPTION权限使您可以向其他用户提供或从其他用户中删除您自己拥有的权限 .

    出于安全原因,您不应将此类型的用户帐户用于公众可以访问的任何进程(即网站) . 建议您create a user with only database privileges进行此类使用 .

  • 20

    这是一个老问题,但我不认为接受的答案是安全的 . 如果要在单个数据库上授予权限,那么创建超级用户会很好但不好 .

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

    % 似乎没有涵盖套接字通信, localhost 用于 . WITH GRANT OPTION 仅对超级用户有利,否则通常存在安全风险 .

    希望这可以帮助 .

  • 12

    您好我使用此代码在mysql中拥有超级用户

    GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
        CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
        EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
        LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
        SUPER
            ON *.* TO mysql@'%'
        WITH GRANT OPTION;
    

    然后

    FLUSH PRIVILEGES;
    
  • 28

    仅从远程服务器访问mydb数据库

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

    从远程服务器访问所有数据库 .

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

    这对某些人有用:

    从MySQL命令行:

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    

    遗憾的是,此时newuser无权对数据库执行任何操作 . 事实上,如果newuser甚至尝试登录(使用密码,密码),他们将无法访问MySQL shell .

    因此,首先要做的是为用户提供他们所需信息的访问权限 .

    GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
    

    此命令中的星号指的是它们可以访问的数据库和表(分别) - 此特定命令允许用户读取,编辑,执行和执行所有数据库和表中的所有任务 .

    完成要为新用户设置的权限后,请务必重新加载所有权限 .

    FLUSH PRIVILEGES;
    

    您的更改现在将生效 .

    有关更多信息:http://dev.mysql.com/doc/refman/5.6/en/grant.html

    如果您对命令行不熟悉,那么您可以使用像MySQL workbenchNavicatSQLyog这样的客户端

  • 484

    此SQL授予所有数据库,但只授予基本权限 . 它们足以用于Drupal或Wordpress,并且作为一个精确的,允许一个开发者帐户用于本地项目 .

    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, 
        INDEX, ALTER, CREATE TEMPORARY TABLES 
    ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
    

相关问题