【发布时间】:2012-01-11 23:19:38
【问题描述】:
我想执行这样的事情:
UPDATE grades SET status="pass" WHERE recno=123;
但是,我希望执行更新的用户帐户对数据库具有只写访问权限,这意味着它没有 SELECT 访问权限。这会导致 WHERE 子句失败。
如果有必要,我实际上可以重写整个记录,但是recno是主键,这会导致写入失败。有什么办法吗
INSERT INTO grades (recno,name,status,...) VALUES (123, 'chemistry', 'pass',...)
ON DUPLICATE KEY UPDATE <everything>;
或者这是错误的方法?此外,这也不是“更新特定记录中的特定字段”问题的通用解决方案。
【问题讨论】:
-
更多信息:我有一个将日志写入远程服务器的应用程序。该应用程序将在程序开始时写入一条新记录,状态为“未完成”。此步骤将从 Mysql 服务器接收自动生成的 recno 值。该过程完成后,我想用新值修改该记录的状态字段。由于任何人都可以在应用程序上运行字符串并获取其登录凭据,因此我需要授予该帐户对数据库的只写访问权限。
-
“每个人都可以在数据库上运行字符串”是什么意思?您授予每个人对您的数据库写入的访问权限?这听起来很危险。
-
我的意思是任何人都可以在应用程序上运行字符串。例如。任何人都可以对应用程序进行逆向工程并找出它的登录凭据是什么。因此,我想将该登录限制为仅对其运行所必需的那些操作。
-
您意识到有人可以只做
UPDATE grades SET status=NULL并且您数据库中的所有记录都会被破坏。您所以需要创建一个您的应用程序可以查询的 API。 -
正如我在下面的回答中提到的,正确的方法是创建一个 API,您的用户可以通过该 API 与您的数据库进行通信。
标签: mysql