我创建了一个简单的存储过程:
mysql> CREATE FUNCTION hello (s CHAR(20))
-> RETURNS CHAR(50) DETERMINISTIC
-> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected, 1 warning (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
但未能运行它:
mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'
Run Code Online (Sandbox Code Playgroud)
我的用户名可能是空字符串吗?如何创建用户并授予权限?我可以授予用户对数据库中所有实体的所有权限吗?
我在 Postgres 中有多个用户。我想为不同的用户设置不同的语句超时。
例如:访客 5 分钟,管理员 10 分钟。
在 Postgres 11.11 中可以吗?
有人新加入了公司,我使用以下命令在 mysql 中为她创建了一个帐户:
CREATE USER 'username' IDENTIFIED BY 'password'
Run Code Online (Sandbox Code Playgroud)
她需要创建自己的模式,因此使用:
GRANT CREATE ON *.* TO username;
Run Code Online (Sandbox Code Playgroud)
问题是现在她能够创建新的模式和表,但她不能用它做任何事情。我希望她不能访问现有的模式/表,但能够创建自己的数据库并对其进行任何操作。这可能吗?
我正在考虑将用户的 OID 存储在表的“所有者”列中,因此如果他们更改了用户名,我无需执行任何操作。
我知道可以将 pg_has_role() 与 OID 一起使用,这很好。
是否有一种快速简便的方法来获取当前用户的 OID,而无需将其与系统表之一进行匹配?
据我了解,指定了默认数据库,这样如果您没有在连接字符串中指定数据库,它就会知道从哪里开始。它是否正确?
我从未见过没有指定数据库的连接字符串,这可能吗?为什么有人想要这样做?它只是使您连接的数据库变得不那么透明。
换句话说,是否有任何理由选择 master 之外的其他数据库作为默认数据库?
我正在阅读 O'Relly “Learning MySQL”,它说您可以通过执行以下操作在 MySQL 中创建一个用户:
mysql> GRANT ALL ON *.* TO 'jill'@'%.invyhome.com' IDENTIFIED BY 'the_password';
Query OK, 0 rows affected (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
但如果我尝试这样做:
-> grant select on testgrounds.personas to ''@'localhost';
--> Error Code: 1133. Can't find any matching row in the user table
Run Code Online (Sandbox Code Playgroud)
但是如果我使用密码它会成功:
->grant select on testgrounds.personas to ''@'localhost' identified by 'pass';
--> 0 row(s) affected
Run Code Online (Sandbox Code Playgroud)
我不得不恢复用户 root 的权限,因为我正在试验并且我把它们搞砸了,所以我想在这样做之前我实际上可以使用书中的语句(我不记得 100%)
-> select current_user;
--> 'root@localhost'
-> show grants;
--> 'GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' IDENTIFIED BY …Run Code Online (Sandbox Code Playgroud) 我需要导出所有 MySQL 数据库用户(包括权限)以进行迁移。有超过 5,000 个用户,这样做的最佳方法是什么?
我应该把mysql.user桌子扔掉吗?
在执行 SQL Server (v12.0.2000) 数据库的还原后,我认为需要将用户重新映射到其登录名(这个问题似乎被称为孤儿用户)。最简单的方法之一是执行:
use [MyDatabase];
alter user MyUser with login = MyUser;
Run Code Online (Sandbox Code Playgroud)
然而,在实现恢复后,该USE命令失败了,因为我试图用 执行上述命令'MyUser',这是孤立的...
因为它是在脚本中,所以我想避免restore与一个用户和alter user另一个用户执行 a ,以便第一个用户正确地重新映射到其登录名。
有没有办法用“MyUser”来做到这一点(谁可以毫无问题地连接到主人)?
我通过以下方式完全限定“MyUser”进行了尝试,但没有成功:
use master;
alter user MyDatabase.MyUser with login = MyUser;
Run Code Online (Sandbox Code Playgroud)
知道这是否可能以及如何做到吗?
我正在管理 PotsgreSQL 服务器,最近我意识到我的“非超级用户”用户有可能更改我为不安全密码分配的安全密码。
我在REVOKE文档中进行了搜索,但找不到阻止这种情况的方法。有可能的?
提前致谢!
我有一个应用程序,可以自动创建 PostgreSQL 数据库,还可以自动创建数据库用户。出于安全目的,该数据库用户被授予有限的访问权限,因为它将被移交给客户端使用。 我使用的版本是Postgres 9.6
CREATE USER %USERSETUP% WITH
LOGIN PASSWORD '%USERSETUPPASS%'
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT -1;
ALTER DEFAULT PRIVILEGES IN SCHEMA %SCHEMA% GRANT INSERT, SELECT, UPDATE, DELETE, REFERENCES ON TABLES TO %USERSETUP%;
Run Code Online (Sandbox Code Playgroud)
现在,我的测试还进入创建的数据库,并验证它是否已正确创建,使用查询脚本获取表名称,然后获取每个表内的列名称(作为奖励,还获取列数据类型)
由于这些权限,用户无法使用 information_schema。 另外,我只请求带有 SYSTEM CATALOG 的查询脚本
我的表名脚本有效:
SELECT tablename FROM pg_catalog.pg_tables where schemaname = '{schema}'
Run Code Online (Sandbox Code Playgroud)
这将表名称作为列表返回:
业务、位置、人员、客户等...
但是,当我运行以下两个脚本来获取列名称时,我得到的返回值为 0,就好像该用户正在尝试查询 information_schema 一样。我猜这是因为特权:
SELECT c.oid,
n.nspname,
c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ 'schemaaryzdhyqoi'
AND …Run Code Online (Sandbox Code Playgroud) users ×10
permissions ×5
mysql ×4
postgresql ×4
logins ×2
sql-server ×2
password ×1
scripting ×1
security ×1