我发现exec(sql)代码中隐藏了一些语句。它们存在是有充分理由的,因为这些语句不能直接编写,但它们是一个明显的攻击媒介。
有没有安全的替代品exec(some sql)?将正确参数化的东西,包括语句中的表名?
假设在数据库中创建了一个证书
create certificate certName
with subject = 'subj';
GO
Run Code Online (Sandbox Code Playgroud)
和映射到此证书的用户
create user userName
from certificate certName;
GO
Run Code Online (Sandbox Code Playgroud)
试图直接冒充此用户
execute as user = 'userName';
GO
Run Code Online (Sandbox Code Playgroud)
或execute as在模块的子句中指定用户
create procedure procName
with execute as 'userName'
as
set nocount on;
GO
Run Code Online (Sandbox Code Playgroud)
返回错误
消息 15517,级别 16,状态 1 ...
无法作为数据库主体执行,因为主体“userName”不存在、无法模拟此类主体或您没有权限。
但是,我找不到文档中提到的这个限制(这里和这里),唯一相关的声明似乎是
user_name 必须存在于当前数据库中并且必须是单例帐户。user_name 不能是组、角色、证书、密钥或内置帐户,例如 NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService 或 NT AUTHORITY\LocalSystem。
是否可以模拟映射到证书的用户(或登录)?
我正在尝试查找 PostgreSQL可信过程语言 (PL)的列表,因为我经常需要在非超级用户环境中使用 PL。
但我找不到确切的答案。例如,这里的Postgres 文档表明 perl 有一个受信任和一个不受信任的 PL,这是一种我不太熟悉的语言。这里,它说TRUSTED关键字是您在创建 PL 语言时可以指定的内容,在某些情况下可能会被忽略。
但我也有(可能是错误的)印象,即某些 PL 语言仅受信任(例如 JavaScript PL/V8)或仅不受信任(Python)。其他帖子似乎表明可以调整 pg 以使用以下内容制作甚至是python一种可信赖的语言:
UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpythonu';
Run Code Online (Sandbox Code Playgroud)
我的问题比理论更实际。基本上:
是否可以将任何 PL 设置为可信和不可信?
如果不是,可以设置为受信任或受信任的特定语言是什么。
(“受信任”是指普通用户在 PL 语言中创建/执行/修改函数时应该具有有效的相同权限。另外,我使用的是 Postgres 9.x)
我正在查看计算机管理->用户,发现 SQL Server Express 为我创建了很多用户。
为什么?我的系统被感染了吗?
描述都说,“在 SQL Server 实例 SQLEXPRESS 中执行 R 脚本的本地用户帐户”。
我使用 SQL Server 2016 进行这些测试。
以下不允许我在模式 S 中为用户 U 创建表
USE [D];
GRANT CONTROL ON SCHEMA :: [S] TO [U];
Run Code Online (Sandbox Code Playgroud)
但这确实:
USE [D]
GRANT ALTER ON SCHEMA :: [S] TO [U];
GRANT CREATE TABLE TO [U];
Run Code Online (Sandbox Code Playgroud)
如果您必须运行这两个附加命令以允许用户在特定模式中创建表,那么 GRANT CONTROL 应该做什么?
这个描述很好,但是我可以运行什么样的用例来确认(成功或失败)GRANT CONTROL 命令在运行该命令之前和之后在物理上影响用户在使用和不使用此模式的数据库上的安全性?
CONTROL 权限:CONTROL 权限可用于轻松地将某个实体的所有权限授予某个主体。它是实体所有权之后的下一个最好的东西,但它不如所有权那么强大。主要区别在于 CONTROL 的被授予者仍然可以被拒绝对实体的一些其他权限。例如,我可以在一个表上被授予 CONTROL,同时我可以在那个表上被拒绝 SELECT,从而阻止我从中选择——这永远不会发生在所有者身上,因为所有者不能被授予或拒绝权限.
安全人员希望所有AD 密码每三个月过期一次。我真的对此并不感到兴奋,因为我肯定不会记得,而且当它们到期时,我很可能会醉倒在我的船上。
问题您/应该多久更改一次 sql 服务帐户的密码?
使用sp_send_dbmail在 SQL Server 上发送电子邮件时,如何指定以加密格式发送电子邮件?
security sql-server encryption sql-server-2012 database-mail
我有一个奇怪的。在过去的几周里,我通过 Windows 身份验证偶尔遇到登录错误,网络团队和我还没有找到解决方案。
我在运行 Windows Server 2012 R2 的物理服务器上运行 SQL 2016。
虽然这种情况一直在发生,但我一直告诉用户等待五分钟,然后再次尝试登录。如果用户等待五分钟,他们将(大多数情况下)能够登录。我曾遇到过 15 分钟无法登录的情况,然后我的下一次登录尝试成功了。
从 SQL 错误日志中,我看到如下条目:
登录失败。登录名来自不受信任的域,不能与 Windows 身份验证一起使用。[客户端:XX.XX.XXX.XXX] 错误:18452,严重性:14,状态:1。
SSPI 握手失败,错误代码为 0x80090311,在建立具有集成安全性的连接时状态 14;连接已关闭。原因:AcceptSecurityContext 失败。Windows 错误代码指示失败的原因。无法联系授权进行身份验证。[客户:XX.XX.XXX.XXX] 错误:17806,严重性:20,状态:14。
从服务器,我看到这个:
一个帐户登录失败。
主题:安全 ID:NULL SID 帐户名称:- 帐户域:- 登录 ID:0x0
登录类型:3
登录失败的帐户:安全 ID:NULL SID 帐户名称:A 用户帐户域:A 域
失败信息:失败原因:登录期间发生错误。状态:0xC000005E 子状态:0x0
进程信息:调用方进程 ID:0x0 调用方进程名称:-
网络信息: 工作站名称: A 计算机源网络地址: - 源端口: -
详细的身份验证信息:登录过程:NtLmSsp 身份验证包:NTLM 传输服务:- 包名称(仅限 NTLM):- 密钥长度:0
任何想法可能导致(有时)这样的登录失败?
我有一个存储过程,它为需要由我们的一位数据分析师每个月运行的特定项目创建一个数据库。问题是我如何构建它以使分析师能够在不授予他们创建数据库权限的情况下运行此存储过程。
我试过用 EXECUTE 作为 OWNER/USER_NAME
分析人员仍然收到以下错误:消息 262,级别 14,状态 1,第 67 行 CREATE DATABASE 权限在数据库“master”中被拒绝。
有什么建议吗?
security sql-server stored-procedures permissions impersonation
我们有一个制造商,其软件需要对主数据库进行授权(仅数据库所有者工作)。不幸的是,制造商无法告诉我们为什么需要访问主数据库。没有此权限,应用程序将不会启动。
你有什么意见?你见过这样的软件吗?我们有 200 个不同的应用程序,但这是第一个需要永久访问的应用程序
对安全有异议吗?
作为替代方案,我们可以安装 SQL Express 实例,因为数据库非常小。如果从您的角度访问主数据库不是一个好主意。
security ×10
sql-server ×8
permissions ×2
certificate ×1
dynamic-sql ×1
encryption ×1
functions ×1
postgresql ×1
signature ×1
t-sql ×1
table ×1