gpt4 book ai didi

database - Informix 如何查找一个数据库中的所有用户?

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:56 24 4
gpt4 key购买 nike

当我在数据库中创建用户时,它不会显示在数据库的“sysusers”表中,直到用户被授予任何数据库级别的权限,如何识别当前数据库中没有权限的用户?

最佳答案

sysusers系统目录表仅显示谁拥有数据库级访问权限。

如果你想检查已被授予角色但不持有数据库级访问权限的用户,你可以跨越 sysroleauthsysusers系统目录表:

    SELECT  grantee
FROM sysroleauth
MINUS
SELECT username
FROM sysusers;

When granting a role to a user, or to another role, it will not validate if this exists.

It will only give a error if you attempt to grant a role to yourself, unless you have DBSECADM, or if you include the WITH GRANT OPTION keywords in a GRANT statement that assigns a role to another role.

后续问题:

is it legitimate to grant privilege to the user who is not granted any db level privileges?

是的,这是合法的。如果您创建一个角色并将其默认分配给没有数据库级别权限的用户,它将被授予与数据库的隐式连接。

在这种情况下,用户只会在您发出 GRANT DEFAULT ROLE 后出现在 sysusers 上声明。

Other cases:

如果用户是使用 CREATE USER 创建的声明你必须查看 sysuser数据库。

如果您的意思是代表其他在数据库上没有用户的模式创建对象,您需要获得所有这些所有者。

您可以通过查询找到存储所有者的系统目录表:

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;

但您可能只想看一下 systables , sysobjstatesysprocedures .

尝试以下操作:

SELECT  owner
FROM systables
WHERE tabid > 99
UNION
SELECT owner
FROM sysobjstate
UNION
SELECT owner
FROM sysprocedures
MINUS
SELECT username
FROM sysusers;

请记住,一些内部用户,如 sqljsysibmsysproc,可能会出现,因为 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用户,通常0root用户和范围[1-99]为特殊系统用户保留

然后一些系统开始为 100 的非特权用户设置 UID。其他的,例如 Red Hat,从 500 开始,还有一些,例如 Debian,从 1000 开始。

关于database - Informix 如何查找一个数据库中的所有用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36301171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com