Ahmad
Ahmad

Reputation: 5760

Grant CREATE TABLE permission to MySQL User

I have a database that is shared between some users, and I want to manage their permissions on this.

I want to give permission for creating a new table, and accessing (select, insert, update, delete) to that table of course, to a user that doesn't have full permission on the database (only he has SELECT access to some tables).

So, I executed this query:

GRANT CREATE ON eh1 TO user1

Then, when I logged in with that user and tried to create a new table, I got this error:

1142 - CREATE command denied to user 'user1'@'localhost' for table 'folan'

What is the problem here? How can I do that?

UPDATE

The problem solved partially by changing the command to this:

GRANT CREATE ON eh1.* TO user1

Now there is another problem, that the user1 cannot select or insert into the newly created table. The reason is understandable, but is there a way to solve this?

Thanks

Upvotes: 8

Views: 41502

Answers (2)

Zafar Malik
Zafar Malik

Reputation: 6854

use as per below-

GRANT CREATE ON eh1.* TO user1@'%' IDENTIFIED BY 'user1_password';

Note: '%' will provide access from all ips, so we should provide rights to specific ip instead of all ips, so change '%' with any ip like '191.161.3.1'

If user need select/insert/update/delete/create rights then syntax will be -

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON eh1.* TO user1@'%' IDENTIFIED BY 'user1_password';

Update as per user requirement:

GRANT CREATE ON eh1.* TO user1@'%' IDENTIFIED BY 'user1_password';
GRANT SELECT, INSERT, UPDATE ON eh1.table1 TO user1@'%';
GRANT SELECT, INSERT, UPDATE ON eh1.table2 TO user1@'%';

Upvotes: 13

Stefano P.
Stefano P.

Reputation: 179

Following this, correct syntax is

GRANT CREATE ON eh1.* TO user1

With eh1 a database.

If you don't use ".*", your database is considered a table.

Upvotes: 4

Related Questions