Database Informix如何查找数据库中的所有用户?
当我在数据库中创建用户时,在授予该用户任何数据库级权限之前,该用户不会显示在数据库的“sysusers”表中,如何识别当前数据库中没有权限的用户?系统目录表仅显示谁拥有数据库级访问权限 如果要检查已被授予角色但不具有数据库级访问权限的用户,可以使用系统目录表跨越:Database Informix如何查找数据库中的所有用户?,database,informix,Database,Informix,当我在数据库中创建用户时,在授予该用户任何数据库级权限之前,该用户不会显示在数据库的“sysusers”表中,如何识别当前数据库中没有权限的用户?系统目录表仅显示谁拥有数据库级访问权限 如果要检查已被授予角色但不具有数据库级访问权限的用户,可以使用系统目录表跨越: SELECT grantee FROM sysroleauth MINUS SELECT username FROM sysusers; 将角色授予用户或其他角色时,将不会验证
SELECT grantee
FROM sysroleauth
MINUS
SELECT username
FROM sysusers;
将角色授予用户或其他角色时,将不会验证是否存在该角色
只有在尝试将角色授予自己时,或者在将角色分配给其他角色的语句中包含关键字时,才会出现错误
关于后续问题:
向未被授予任何db级权限的用户授予权限是否合法
是的,这是合法的。如果创建角色并将其默认分配给没有db级别权限的用户,则将授予该角色到数据库的隐式连接
在这种情况下,用户只会在您发出语句后出现在sysusers
上
其他情况:
如果用户是使用该语句创建的,则必须查看数据库
如果您的意思是代表数据库中没有用户的其他模式创建对象,则需要获得所有这些所有者
您可以通过查询找到存储所有者的系统目录表:
SELECT UNIQUE t.tabname
FROM systables t
INNER JOIN syscolumns c ON (t.tabid = c.tabid)
WHERE c.colname = 'owner' AND t.tabid < 100
ORDER BY 1;
请记住,一些内部用户,如sqlj
、sysibm
和sysproc
,可能会出现,因为sysprocedures
没有过滤内部用户
如果要查看所有不具有数据库级访问权限的操作系统用户,可以在UNIX中执行以下操作:
CREATE TEMP TABLE os_users(
username CHAR(32),
password CHAR(1),
uid INT,
gid INT,
gecos CHAR(256),
home_dir CHAR(256),
shell CHAR(32)
) WITH NO LOG;
LOAD FROM '/etc/passwd' DELIMITER ':'
INSERT INTO os_users;
SELECT username
FROM os_users
MINUS
SELECT username
FROM sysusers;
您可以通过uid
过滤OS用户,通常0是根用户,范围[1-99]为特殊系统用户保留
然后,一些系统在100为非特权用户启动UID。其他的,如Red Hat,从500开始,还有一些,如Debian,从1000开始,系统目录表只显示谁拥有数据库级访问权限
如果要检查已被授予角色但不具有数据库级访问权限的用户,可以使用系统目录表跨越:
SELECT grantee
FROM sysroleauth
MINUS
SELECT username
FROM sysusers;
将角色授予用户或其他角色时,将不会验证是否存在该角色
只有在尝试将角色授予自己时,或者在将角色分配给其他角色的语句中包含关键字时,才会出现错误
关于后续问题:
向未被授予任何db级权限的用户授予权限是否合法
是的,这是合法的。如果创建角色并将其默认分配给没有db级别权限的用户,则将授予该角色到数据库的隐式连接
在这种情况下,用户只会在您发出语句后出现在sysusers
上
其他情况:
如果用户是使用该语句创建的,则必须查看数据库
如果您的意思是代表数据库中没有用户的其他模式创建对象,则需要获得所有这些所有者
您可以通过查询找到存储所有者的系统目录表:
SELECT UNIQUE t.tabname
FROM systables t
INNER JOIN syscolumns c ON (t.tabid = c.tabid)
WHERE c.colname = 'owner' AND t.tabid < 100
ORDER BY 1;
请记住,一些内部用户,如sqlj
、sysibm
和sysproc
,可能会出现,因为sysprocedures
没有过滤内部用户
如果要查看所有不具有数据库级访问权限的操作系统用户,可以在UNIX中执行以下操作:
CREATE TEMP TABLE os_users(
username CHAR(32),
password CHAR(1),
uid INT,
gid INT,
gecos CHAR(256),
home_dir CHAR(256),
shell CHAR(32)
) WITH NO LOG;
LOAD FROM '/etc/passwd' DELIMITER ':'
INSERT INTO os_users;
SELECT username
FROM os_users
MINUS
SELECT username
FROM sysusers;
您可以通过uid
过滤OS用户,通常0是根用户,范围[1-99]为特殊系统用户保留
然后,一些系统在100为非特权用户启动UID。其他人,如Red Hat,从500开始,还有其他人,如Debian,从1000开始,非常感谢Henriques先生,我想强调一下我困惑的地方是,向用户授予角色时1)如果当前数据库的sysusers表中不存在用户,并且sysuser数据库中存在用户,则我可以授予角色2)如果两个数据库中都不存在用户,则我也可以授予角色。请澄清。@starc检查答案上方的编辑是否足够。再次感谢Henriques大师的编辑,我不想给您带来太多麻烦,但我在授予用户角色方面存在不确定性,即,向未被授予任何db级权限的用户或服务器不知道的用户授予权限是否合法,即使informix毫无错误地接受了这一点,请帮助@henriques。@henriques,这几天我又有一个疑问,假设我使用“创建具有属性的默认用户”创建默认用户如何识别默认用户我是说默认用户条目存在于哪个表中?请澄清。@starc使用属性创建默认用户
本身不会创建用户。它将只创建一组默认属性,如unix/linux使用的框架。然后,您可以忽略属性来创建。你真的应该为每一个疑问提出一个问题,不仅答案更客观,而且其他有同样疑问的用户也可以更容易地找到答案。非常感谢Henriques先生,我想证实我困惑的地方是,向用户授予角色时1)如果用户不在当前数据库的sysusers表中,并且存在于sysuser数据库中,我可以授予角色2)如果用户存在