我想删除当前打开到特定 PostgreSQL 数据库的所有连接(会话),但不重新启动服务器或断开与其他数据库的连接。
我怎样才能做到这一点?
如果我打开到 Postgres 的连接并发出长时间运行的查询,然后断开连接(例如,终止打开连接的客户端进程),长时间运行的查询会继续运行,还是会自动中止?这个可以配置吗?
(我使用的是 Postgresql 9.2.9)
我想在 Azure SQL 数据库 V12 上试用包含的数据库用户功能,但是我遇到了一个对我来说似乎很奇怪的身份验证问题。
我创建了一个名为Classifier
. 我将我的 IP 添加到防火墙规则中,以便我可以从工作站上的 SSMS 连接到 Azure db 服务器。一旦我能够通过 SSMS 连接以进行管理,我尝试向数据库添加一个带有密码的用户,如下所示:
CREATE USER classifier WITH PASSWORD='thepassword'
Run Code Online (Sandbox Code Playgroud)
我还将此用户添加到数据写入者和读取者角色中:
exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'
Run Code Online (Sandbox Code Playgroud)
在此之后,我可以使用来自 SSMS 的这些凭据连接到数据库:
但这就是事情出错的地方:我尝试了几种不同的连接字符串咒语,但似乎无法在我正在开发的网络应用程序中建立连接。它在 Azure 环境中不起作用,所以我在 localhost 上运行,并带有到 Azure 数据库的连接字符串,但它无法连接。这是我目前使用的连接字符串:
<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)
我尝试为用户重置密码(通过 SSMS),然后更新连接字符串;我还通过将密码从该连接字符串中复制到 SSMS 中的连接对话框中来仔细检查密码,以确保那里没有某种类型的拼写错误。
我在 Azure db 服务器中启用了审计,希望得到一些关于它失败原因的详细信息,但我得到的只是:
这就是我被困的地方。我通过文档或博客找到的大部分内容表明要做的是查看 SQL Server 日志以查看真正的错误状态是什么,这将更狭隘地表明失败的性质,但是由于我正在处理 Azure 没有办法做到这一点(据我所知)。
什么会导致应用程序在 SSMS(以及 LinqPad 和 Visual Studio Server Explorer,顺便说一句)成功的情况下失败?
每次尝试重新启动 MySql 时,我都会收到以下错误。在我更改默认数据目录之前它工作正常。
ERROR 2002 (HY000): 无法通过 socket '/var/lib /mysql/mysql.sock' (111) 连接到本地 MySQL 服务器
我知道其他人发布了其他解决方案,但没有一个对我有用。
在 SQL Server 中,我可以在协议设置中“强制加密”。如果我将该设置保留为“否”,则任何客户端仍可能需要加密。
我能以某种方式查看到数据库的哪些连接正在使用加密吗?
我们有一种情况,开发人员没有任何UPDATE
权限,但他们使用应用程序并查看连接字符串 -> 他们知道来自某些SQLLogin1
具有 UPDATE 权限的SQL 帐户(示例)的密码。我们目前的操作并不完善,有时需要修改生产数据(目前还没有 GUI)。
开发人员没有联系 DBA 并要求他修改数据,而是(不正确地)使用 SQL 帐户SQLLogin1
(有权修改数据),并通过 SQL Server Management Studio 连接自己修改数据。
DBA 无法SQLLogin1
在 Developer 看到新连接字符串和新密码的情况下更改密码,因为使用的应用程序连接字符串SQLLogin1
是由 Developer 维护的。
有没有办法拒绝访问SQLLogin1
SQL 登录,但前提是它通过 SSMS 连接?
同时如果SQLLogin1
正在连接.Net SqlClient Data Provider
(program_name
在sys.dm_exec_sessions
),必须允许登录。
这样我们就不想让开发人员使用 SSMS 连接SQLLogin1
,而使用的应用程序SQLLogin1
仍然可以连接。
假设我找到了一个 SQL Server,但我不知道哪些应用程序连接到它。也许我找到了一个应用程序,但我不确定它是否是唯一一个使用它的应用程序。
有没有找到所有不同连接的好方法?
假设我们有 2 个完全不同的查询,它们引用了一个同名的临时表:
查询一 .... 操作:#tempTableName
查询二 .... 操作:#tempTableName
我对此进行了研究,发现“#temp 是一个本地临时表,因此对其他连接不可见”,但是我不确定连接在 SQL 查询上下文中的真正含义。SQL 是否认为每个运行的单独查询都有一个单独的“连接”,或者连接是否以某种方式共享?
具体来说,我的问题是“如果我的场景中的两个查询被同一个登录名访问会发生什么”,例如多个 .NET 应用程序使用相同的 .NET 连接字符串并同时访问数据库。如果我的场景中的两个查询同时运行,他们是否会潜在地访问同一个临时表?锁呢?我是否需要采取任何措施来防止在桌子上操作期间发生不必要的访问?
我看过这个答案,/sf/ask/32686321/,但是我真的需要像“假装我 6 岁”这样的解释,以便我我非常清楚在我的假设场景中发生了什么,就 SQL 查询究竟如何利用连接和确定独占访问等而言。任何可以让我完全掌握这一点的图表或资源指针都会很棒!
这是我第一次在 AWS 上使用 RDS,我使用 t2.medium 实例运行 MySQL Aurora 和默认配置。CPU 使用率和 DB 连接是很正常的,直到“某事”发生,这导致 DB 连接一直达到最大值(t2.medium 为 80 个连接)。
我只有一个 Web 应用程序,在 EC2 实例上运行。当数据库连接数达到最大值时,EC2 实例的 CPU 使用率绝对正常(25-30%),但所有尝试连接到数据库实例的结果都是“连接过多”。
我当时还检查了数据库实例的 CPU 利用率 - 它没有显示高负载信号。在罢工期间,CPU 利用率下降到 20% 并始终保持该比率。
我不明白的事情:数据库连接已达到最大值,但为什么数据库 CPU 利用率下降了?由于这些连接中的查询计算,它不应该也处于最大值吗?
请帮助我理解,非常感谢。
(当第二次罢工发生时,我不得不将 RDS 实例的大小调整为 r4.large;我现在仍在运行它,直到我发现问题......)
connections ×10
sql-server ×5
mysql ×2
postgresql ×2
ado.net ×1
concurrency ×1
encryption ×1
errors ×1
logins ×1
permissions ×1
session ×1
startup ×1