标签: security

6
推荐指数
0
解决办法
680
查看次数

从客户端到服务器的连接上的数据交换是否以纯文本形式通过线路发送?

我有一个新的 SQL Server 2019 本地实例。假设客户端是 SQL Server Management Studio 或任何其他应用程序:

  1. 当客户端使用 SQL Server 身份验证连接到服务器时,连接请求是否以纯文本形式从客户端发送到服务器?换句话说,身份验证凭据是否通过网络公开(纯文本)?换句话说,攻击者可以看到线路上的用户名/密码吗?MSDN 文档(https://learn.microsoft.com/en-us/learn/modules/configure-database-authentication-authorization/3-describe-authentication-identities)说:

Active Directory 身份验证被认为更安全,因为 SQL Server 身份验证允许在通过网络传递时以纯文本形式查看登录信息。

在此输入图像描述

  1. 身份验证之后,假设未配置 TLS,那么查询(示例:SELECT)及其输出是否在网络上以纯文本形式可见?

security sql-server

6
推荐指数
1
解决办法
552
查看次数

具有多个数据库的 SQL Server(每个客户端一个) - 就登录/用户/权限而言,最佳安全实践是什么?

我们有多个 SQL Server,每个 SQL Server 拥有数十个数据库 - 每个客户端一个(在这种情况下,客户端意味着一个客户组织)。这些数据库是通过应用程序访问的,但该应用程序当前使用单个 Windows 登录。因此,这会产生安全风险,即如果存在某些应用程序漏洞,理论上可以访问“其他”客户端的数据库。

处理这种情况的最佳方法是什么?

我们是否应该为每个客户端创建单独的登录名并让应用程序使用单独的登录凭据进行连接?这将降低安全风险,但会产生大量的管理开销(这可能是值得的)。

后续问题是:在这种情况下我们应该使用 Windows AD 安全性还是 SQL Server 身份验证。

我很感激任何建议!

authentication security sql-server multi-tenant

6
推荐指数
2
解决办法
2617
查看次数

角色 db_ddladmin 在 SQL Server 2008 上无法正常工作

我想允许某些用户在数据库(表、视图、sp、函数、模式等)上创建/修改对象,并且不想给 db_owner。

我以为我可以使用 db_ddladmin 角色来做到这一点,但不知何故这并不如预期。我得到的错误消息是这样的:

Your are not loggend on as the database owner or system administrator. 
You might not beable to sache changes to tables that you do not own.

Table dbo.MyTable is set to read only, 
user doesn't have enough right on this table.
Run Code Online (Sandbox Code Playgroud)

等等

知道如何实现我的目标吗?

sql-server-2008 security permissions

5
推荐指数
1
解决办法
2729
查看次数

命名实例是否比默认实例更安全?

我意识到您可以从 1433 的默认端口更改默认实例,同样您可以使命名实例使用静态端口而不是动态端口,但通常命名实例比默认实例更安全以抵御外部入侵者?

这就是为什么我会认为是这样的:

  1. 命名实例(同样,默认情况下我意识到)利用动态端口。如果您将 SQL Browser 服务移动到与 1434 不同的端口上进行侦听,那会更好,我想。
  2. 默认实例很容易确定为数据源。这只是服务器的名称。但是命名实例是使用 serverName\instanceName 架构检索数据源的额外步骤。

对此有何想法?我在左场出路了吗,这没有区别吗?

security sql-server

5
推荐指数
1
解决办法
733
查看次数

限制每个 IP 地址的数据库访问

我已经过滤了访问数据库服务器的 IP 地址,如下所示:

设置sqlnet.ora

tcp.validnode_checking = YES
tcp.invited_nodes = (localhost, 192.168.100.130, 192.168.100.186)
Run Code Online (Sandbox Code Playgroud)

但是在我的 ORACLE_HOME 中,有 1 个以上的数据库,比如说 DB WORKSHOP 和 DB COURSE

我想问一下每个数据库连接数据库的问题,例如:

DB WORKSHOP only can be access from 192.168.100.130
DB COURSE only can be access from 192.168.100.186
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能做到?

oracle security

5
推荐指数
1
解决办法
1万
查看次数

由*正确*服务主密钥加密的数据库主密钥?

我的客户经常运行我们将数据库从 prod 环境移动到较低环境的过程(使用 prod 数据库刷新 QA 等)。这些 DB 上有数据库主密钥。我们将这些重新加密到目标服务器上的服务主密钥中没有问题,但这是烦人的部分:

  1. sys.databases 表示 DMK 已经加密(尽管使用源服务的 SMK)
  2. 我们无法找到判断 DMK 是否由当前 SMK 加密的方法(检查所有加密 DMV)
  3. sys.symmetric_keys 中的 SMK 签名始终为 0x01(跨服务器不唯一)。

这本身不是问题。解决方法始终是将 DMK 重新加密为 SMK。我们只想知道它是否已经完成。任何人都有任何技巧吗?

谢谢,埃里克

security sql-server t-sql sql-server-2008-r2 encryption

5
推荐指数
1
解决办法
1071
查看次数

带附件的 sp_send_dbmail

SQL Server 2008,通过 SQL Server 身份验证连接。

我有一个存储过程在DatabaseA其调用sp_send_dbmailmsdb同一个文件附件的电子邮件。该文件在数据库服务器上,而不是在远程文件共享上。

正在使用的SQL Server的帐户没有系统管理员,但的确属于DatabaseMailUserRolemsdb

发送没有附件的电子邮件是可以的,但是当存在附件时,我收到一个错误:

无法模拟客户端连接安全上下文。附加文件需要集成的客户端登录

有一些关于此的文章/帖子,但有些似乎在说相互矛盾的事情。我一直在研究模拟,并且在 中的存储过程中起作用的一件事是DatabaseA执行以下操作:

EXECUTE AS LOGIN = 'sa' -- or any account with sysadmin privileges
EXECUTE msdb..sp_send_dbmail ....
REVERT
Run Code Online (Sandbox Code Playgroud)

我没想到这会起作用,因为我想发送附件,您需要使用 Windows 身份验证。但是它确实有效,但这意味着需要授予权限较低的 SQL Server 帐户来模拟 sa(或其他系统管理员帐户)。

在将 DBA 的噩梦释放到野外之前,做我作为开发人员的尽职调查......

我的问题是:允许通过 SQL Server(非系统管理员)进行身份验证的用户在不打开安全漏洞的情况下从本地数据库服务器磁盘发送电子邮件附件的好/安全方法什么?

更新:

回复:凭据

我创建了一个新的 Windows 登录,通过 SSMS 为该帐户创建凭据,将这些凭据映射到我的有限权限 SQL Server 帐户。我收到错误:

消息 22051,级别 16,状态 1,第 0 行
无法模拟客户端连接安全上下文。
附加文件需要集成的客户端登录

我肯定错过了什么!

sql-server-2008 security

5
推荐指数
1
解决办法
2万
查看次数

SQLAgentReaderRole 和 SQL AD ID 登录案例影响编辑作业的能力

我在无法编辑自己的作业的 SQL 2008 服务器上有 AD ID 用户。他们可以创建它们,但是为了编辑它们,他们必须删除它们然后重新添加它们。这个问题在这里解释:http : //blogs.msdn.com/b/sqlserverfaq/archive/2009/06/08/owner-of-the-job-will-not-be-able-to-modify-edit-在-job-in-sql-server.aspx

我做了进一步的研究并发现在我的特殊情况下这是因为我使用 CREATE LOGIN [domain\user] 语法添加了 AD ID 用户。使用该方法,AD ID 的大小写就是您在括号中指定的内容。

无论如何,是否可以使用正确的 Windows AD ID 案例创建用户,以便我不必弄清楚然后修改每个 AD ID 用户的登录名?

此外,我使用此脚本为特定用户获取正确的大小写:

execute as login = 'usa\johndoe'
SELECT SUSER_SNAME()
revert;
Run Code Online (Sandbox Code Playgroud)

但是当我要求用户运行 SELECT SUSER_SNAME() 并给我结果时,它为我返回所有小写字母,但所有大写字母。正确的是全部大写(好吧,为了让该用户能够编辑作业)。

我不知所措,非常沮丧。

-- 我发现获得正确大小写的最佳(唯一?)方法是使用 SQL 界面添加用户,单击搜索,输入 AD ID,然后单击检查名称。对于上面的示例,它返回所有大写字母,尽管该脚本示例返回所有小写字母。

sql-server-2008 security sql-server ssms

5
推荐指数
1
解决办法
417
查看次数

如何获取 Sql Server 安装的 NT 服务帐户的 SID

我正在使用 WMI 来获取服务器本地组的成员以及成员的 SID。WQL 查询适用于本地用户、本地组、AD 域用户和 AD 域组的成员。但是,当脚本查看恰好与 SQL Server 相关的成员时,它在它认为应该查看的类中找不到对象,因此我没有得到成员的 SID。例如,以下是为碰巧与 SQL Server 相关的组成员动态构造的一些查询:

select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLBrowser'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MsDtsServer100'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$SQLEXPRESS'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSSQL$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSOLAP$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='ReportServer$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$EPROVISIONAPP'
Run Code Online (Sandbox Code Playgroud)

上面的查询不返回任何结果,即使这些成员的 PartComponent …

sql-server-2008 security sql-server

5
推荐指数
1
解决办法
5959
查看次数