为了记录数据库项操作的作者凭证(例如创建或更新操作),我使用以下架构:
CREATE TABLE Items
(id integer not null primary key auto_increment
, Item_data varchar(50) not null
, Item_lastmodified_author_name varchar(50) not null
, Item_lastmodified_author_host varchar(100) not null
, foreign key (Item_lastmodified_author_name) references mysql.user (User)
, foreign key (Item_lastmodified_author_host) references mysql.user (Host)
);
使用唯一的mysql.user id引用是不是可以使这更容易?
一个MySQL服务器用于3个团队。每个团队都有自己的数据库。因为MySQL查询将从客户端完成。我不希望一个团队的成员能够更改另一个团队数据库中的任何内容。
我是以正确的方式做到的吗?
答案 0 :(得分:1)
没有。由于以下几个原因,您的外键不会以您的思维方式运作:
mysql.user
表是MyISAM,而不是当前MySQL版本中的InnoDB表。 MyISAM不支持外键。mysql.user
创建一个外键,也可以让任何团队在该表中引用任何用户,而不仅仅是他们自己的用户。为什么不限制每个团队用户的权限?
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES,
EXECUTE ON `team1`.* TO 'team1user'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES,
EXECUTE ON `team2`.* TO 'team2user'@'%';
等
请注意,他们可能需要其他权限,但您不应授予他们SUPER权限,SHUTDOWN或其他权限。 : - )
重新评论:
MySQL没有任何数据概念被拥有"由特定用户。用户有权读取或更改数据,但他们不拥有它。
您可以使用列来存储看起来像user&的数据值。主持人,但您如何确保您的团队无法将这些值设置为他们想要的任何值?您可以设计一个触发器来执行此操作,但团队可以修改触发器。
无论如何,为什么要录制用户&如果您已经授予权限以便只有适当的团队才能访问其各自的数据库,那么表中的主机是什么?