mysql 授权给多个表_为除了一个/几个表以外的所有表格授予[几乎]所有mySQL权限...

本文探讨了如何在MySQL中为用户授予广泛权限,同时防止他们访问或操作特定的敏感表格。用户可以进行INSERT、UPDATE、DELETE、CREATE和DROP操作,但限制在特定表格上。建议使用存储过程作为安全措施,限制CREATE TABLE权限并仅允许在指定表格上执行DROP操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题:

如何为新用户提供几乎所有权限,但仍保留一个或多个表/数据库以保护它们.

细节:

如果我有一个数据库,

>生活

还有三张桌子

>密码

>朋友们

>爱好

如何为此用户提供以下权限:

>插入

>更新

>删除

>创造

> DROP

>改变

关于前三个,我会从这样的事情开始:

GRANT INSERT, UPDATE, DELETE ON life.friends TO username@'localhost' IDENTIFIED BY 'password';

GRANT INSERT, UPDATE, DELETE ON life.hobbies TO username@'localhost' IDENTIFIED BY 'password';

但我对如何使用CREATE和DROP感到困惑.如果我在整个数据库上授予drop权限,如下所示:

GRANT DROP ON life TO username@'localhost' IDENTIFIED BY 'password';

然后用户可以删除我不想要的密码表.我可以根据这样的表格授予它:

GRANT DROP ON life.friends TO username@'localhost' IDENTIFIED BY 'password';

GRANT DROP ON life.hobbies TO username@'localhost' IDENTIFIED BY 'password';

但是如果我像这样授予CREATE权限会发生什么:

GRANT CREATE ON life TO username@'localhost' IDENTIFIED BY 'password';

这是否意味着用户甚至无法删除他/她创建的表格?我的问题还涉及创建/删除数据库.如果我想允许用户创建和删除尽可能多的数据库而不是生命数据库,该怎么办?

我应该通过将密码表移动到另一个数据库来改变我的方法吗?

先谢谢你.

最佳答案 @ TheScrumMeister建议使用单独的数据库的替代方法是定义一个包装CREATE TABLE的过程,但也授予调用用户DROP权限:

DELIMITER ;;

CREATE PROCEDURE create_table(

tbl_name VARCHAR(64) -- maximum length of a table name

) BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;

START TRANSACTION;

SET @usr = SUBSTRING_INDEX(USER(), '@', 1); -- invoking username

SET @tbl = REPLACE(tbl_name, "`", "``"); -- prevent SQL injection

-- just create some dummy table initially - the user can modify it after

SET @qry = CONCAT("

CREATE TABLE `", @tbl, "` (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

);

");

PREPARE stmt FROM @qry;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

-- now grant DROP to the invoking user but only from localhost

SET @qry = CONCAT("

GRANT DROP ON life.`", @tbl, "`

TO CONCAT(?, \"@'localhost'\") IDENTIFIED BY 'password';

");

PREPARE stmt FROM @qry;

EXECUTE stmt USING @usr;

DEALLOCATE PREPARE stmt;

-- clean up

SET @qry = NULL;

SET @usr = NULL;

COMMIT;

END;;

DELIMITER ;

要确保用户不以任何其他方式创建表,它们不应具有CREATE TABLE特权.

你也可以为数据库做类似的事情.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值