我有一个托管的 MySQL 数据库,我需要从我的客户站点访问它。他们拥有快速的宽带连接,可以为他们提供固定池中的一系列 IP 地址。
所以我需要锁定对他们的 MySQL 用户的访问,以便 Host 设置是一个类中的地址范围。不是全班。
我意识到我可以使用诸如 81.91.71.% 之类的通配符,但这太慷慨了。他们的范围更像是
81.10.20.1 --> 81.10.20.15
除了创建 15 个用户(每个 IP 地址一个)之外,还有其他方法可以做到这一点吗?谢谢马克
我偶尔会看到一些问题,询问如何安全地存储 Web 应用程序的用户密码(使用 RDBMS,我不是在谈论 Facebook 或 Twitter)。通常的答案是“对密码加盐,然后使用 TDES 或 SHA512 等强算法对其进行散列”。
我的问题是:作为 RDBMS 用户,我为什么要为密码存储问题而烦恼,因为大多数引擎都有内置的身份验证机制。
例如,如果某个用户 X 想要在我的 Web 应用程序上创建帐户用户密码 Y,那么发出以下查询是如何错误的:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Run Code Online (Sandbox Code Playgroud)
然后在我的应用程序中,用户可以使用他的凭据打开与数据库的连接,而我根本不必费心管理密码。
我看到了这种方法的多个优点:
但在我看到的关于这个主题的几乎每个问题上,似乎都有一个普遍的共识,即这不是必须做的事情。我的问题是:为什么?
注:第三点是允许的政策在PostgreSQL和安全政策在Microsoft SQL Server。我意识到这些概念是新来的,但无论如何,既然它们已经出现,为什么我描述的技术没有成为处理用户帐户的标准方法?
背景资料:
SYSTEM_USER在触发器中调用时,结果总是相同的。UserId每次完成 DML 时都会为其提供一个字符串(仅在存储过程中完成)。我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,我不想看到所有操作都是由服务完成的,我想看看是哪个用户完成的。这不是更新的问题,因为我们有ModifiedBy将通过发送的UserId更新来更新的列。
问题是:有没有办法在SYSTEM_USER运行删除时设置或以其他方式将用户信息放入触发器中?
我现在拥有的“最佳”想法,虽然我不确定这是否是一个好主意,但在服务中,我检查当前UserId是否以用户身份存在于数据库中,如果没有,则创建一个用户为他们反对。然后运行存储过程EXECUTE AS User = @UserId。然后当 DML 在存储过程中完成并且触发器触发时,SYSTEM_USER应该从EXECUTE AS.
假设我创建了一个用户为'TEST_USER',然后我为其分配了一个配置文件。
现在我如何才能看到TEST_USER已分配了哪个配置文件?
我想要一些查询来检查分配给用户的配置文件。
如何在 sql server 2008 R2 中创建用户以使用 Management Studio 仅访问一个数据库。
问候, 萨尔曼
我们正在创建 SAAS,我们最多将拥有 50.000 名客户。我们正在考虑在 Postgres 数据库中为每个客户创建一个用户。我们会将登录我们服务的每个用户映射到数据库中的用户,以确保他们只能访问自己的数据。我们还希望通过此解决方案直接在数据库中实施审计跟踪,它利用触发器。如果每个客户都有自己的数据库用户,那么即使两个客户共享相同的数据,也很容易看出谁做了什么。
因为我们的数据库中有 50.000 个用户,我们会遇到一些意想不到的问题吗?性能方面或管理方面。也许连接池会更困难,但我真的不知道我们是否需要它。
我创建了一个简单的存储过程:
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)
我的用户名可能是空字符串吗?如何创建用户并授予权限?我可以授予用户对数据库中所有实体的所有权限吗?
我正在为我的本地环境设置一个项目,其初始脚本是一些用于创建数据库的 SQL 命令:
create database 'db-name' default character set utf8; 以及grant用户帐户的权限:
grant select, insert, update, delete, create, drop, index, alter on 'db-name'.* to 'user-name-too-long-for-user-name'@'localhost' identified by 'user-name-pass'当我尝试运行grant命令时,我得到了这个:
ERROR 1470 (HY000): String 'user-name-to-long-for-user-name' is too long for user name (should be no longer than 16)我不明白为什么会发生这种情况,而这个脚本在它出现在我的环境之前已经成功运行到另一个环境中。
我使用的服务器版本是5.6.20 MySQL Community Server (GPL)。
这种情况是否与某个 MySQL 版本或其他什么有关?
我在 Postgres 中有多个用户。我想为不同的用户设置不同的语句超时。
例如:访客 5 分钟,管理员 10 分钟。
在 Postgres 11.11 中可以吗?
users ×10
mysql ×4
postgresql ×2
sql-server ×2
audit ×1
mariadb ×1
oracle-11g ×1
performance ×1
permissions ×1
security ×1
trigger ×1