获取mysql.user唯一id?
为了记录数据库项操作(如创建或更新操作)的作者凭据,我使用以下体系结构:获取mysql.user唯一id?,mysql,Mysql,为了记录数据库项操作(如创建或更新操作)的作者凭据,我使用以下体系结构: 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 , fore
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查询将从客户端完成。我不希望一个用户,一个团队的成员,能够更改另一个团队数据库中的任何内容
我这样做对吗?不。外键无法按您的想法工作,原因有几个:
- 在当前版本的mysql中,
表是MyISAM,而不是InnoDB表。MyISAM中不支持外键mysql.user
- 您误解了多列外键的语法。您不会为每一列创建单独的外键,而是创建一个由两列组成的外键,引用目标表的主键
- 即使您可以为
创建一个外键,这也将允许任何团队引用该表中的任何用户,而不仅仅是他们自己的用户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'@'%';
等等
请注意,他们可能需要其他特权,但您不应授予他们超级特权、关机或其他特权。:-)
请回复您的评论: MySQL没有任何数据由特定用户“拥有”的概念。用户有读取或更改数据的权限,但他们不拥有数据 您可以使用列来存储看起来像user&host的数据值,但如何确保您的团队不能将这些值设置为他们想要的任何值?您可以设计一个触发器来实现这一点,但是团队可以修改触发器
无论如何,既然您已经授予特权,只有适当的团队才有权访问各自的数据库,为什么要在表中记录用户和主机?Ok for privileges,但无法将用户id作为记录字段获取?例如,在数据库中保存一项关于谁是物品所有者的知识?谢谢你的回答!