标签: security

将存储过程的权限授予另一个架构中的表

我在 SQL Server 2012 数据库中创建了一个用户,并撤销了该角色授予的所有权限public

然后我授予了EXECUTE存储过程的权限。用户可以执行该过程,但无法获取其返回的数据。

该过程位于 中schema1,它从中选择的表位于 中schema2

如果我将用户添加到db_datareader角色,它可以从数据库中的所有表中读取所有数据。我尝试使用WITH EXECUTE AS OWNER但没有成功。

我怎样才能只授予对给定过程的访问权限而不授予其他任何权限?

schema security sql-server stored-procedures permissions

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

Ola Hallengren DatabaseBackup 在定位 Windows 目录时出错

需要帮助解决使用Ola Hallengren 的存储过程将数据库备份到共享文件夹的问题。

我有一个在 SQL Server 启动时执行的过程。它运行Ola HallengrenDatabaseBackup程序。SQL Server 服务在NT Service.

该共享对运行 SQL 的计算机具有权限。

现在,如果DatabaseBackup手动执行它会很好。当它在启动时自动执行时失败并出现以下错误:

Msg 50000, Level 16, State 1, Procedure DatabaseBackup, Line 786 [Batch Start Line 0] 目录 \\*** 不存在

如果我用Execute As DBO子句更改程序,它会失败并出现相同的错误。

我也试过AlterSP withExecute As Self子句 - 又是同样的错误。

所以问题是:

我该怎么做才能让它发挥作用?

  • 文件路径以 UNC 路径的形式提供(例如\\machine2\backup\
  • 这是 SQL Express,所以我无权访问 SQL 代理作业。
  • 因此,这是一个配置为在 SQL Server 实例启动时运行的存储过程,而不是设置为在 SQL 代理启动时运行的 SQL 作业。

security sql-server ola-hallengren

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

锁定在旧的 2008R2 数据库之外

我们刚刚发现了另一台带有数据库的服务器。数据库归 SQL 帐户所有SA,具有publicsysadmin角色。另一个登录名是BUILTIN\Users,只有public。我只能通过这个连接。SAdisabled,即使不是,我们也可能不知道密码。

问题:有什么方法可以使用enable SA或创建另一个 sql 登录sysadmin

security sql-server sql-server-2008-r2

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

为 CRUD 应用程序访问创建具有有限权限的 SQL Server 登录名和用户

我正在尝试创建一个 SQL 语句来在 SQL Server 中创建一个登录名和用户,这将允许 Web 应用程序对单个数据库执行 crud 操作,并允许完全访问所有表和存储过程、视图等。

我知道如何创建一个登录名和一个用户......但我作为继续的最佳方式离开了我的深度。

CREATE LOGIN [myUser] WITH PASSWORD=N'xxx', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

CREATE USER [myUser] FOR LOGIN [myUser] 
    WITH DEFAULT_SCHEMA = dbo;
GO
Run Code Online (Sandbox Code Playgroud)

security sql-server t-sql

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

无需重新启动 SQL Server 即可更改 SQL Server 服务帐户

出于安全考虑,我们希望每天更改启动 SQL Server 服务的密码。是否可以在不重新启动服务的情况下执行此操作?

如果有可能,更改会立即应用,还是我最终需要重新启动服务以获取新密码?

我们正在考虑在 Windows 操作系统的服务选项中而不是在 SQL Server 配置管理器中进行此更改。

security sql-server configuration-manager

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

如何强制系统管理员将数据存储在 dbo 以外的模式中?

我正在使用 GUI 工具在我的 SQL Server 2016 数据库中上传数据。用于上述任务的用户已被授予 sysadmin 权限,我创建了一个专用架构来存储上述数据。这个架构是拥有的,默认为上述用户。问题是,当我上传数据时,它存储在 dbo 模式而不是专用模式中,我无法从该用户那里撤销 sysadmin priv。

请让我知道如何在不撤销 sysadmin priv 的情况下将数据上传到这个专用模式?

谢谢

schema security sql-server role t-sql

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

是否可以在没有 SSMS 的情况下编辑未加密的 SQL Server 备份文件 (*.bak) 中的数据?

我发现我的数据库中的一项存在差异错误(剩余数量 <>(采购 - 销售))。到目前为止,有超过5000个项目,超过100,000笔交易。对于此计算,每次都运行相同的过程。

但只有一个项目有错误,而且只发生过一次。它似乎没有从应用程序方面发生,因为它已经运行了超过 100,000 次。数据库服务器没有受到物理保护,也没有连接到 Internet。只有我可以登录到服务器。自从我记录错误以来,程序中没有发生任何异常。我不明白上述错误是如何发生的。

我已经看到可以使用记事本打开未加密的 SQL Server 备份文件并读取其数据。以下场景是否可能?

  1. 使用Live CD启动服务器并复制数据库 .mdf 文件
  2. 编辑和更改它的数据(例如:一些数值)
  3. 用被黑的数据库替换服务器上的原始 .mdf 文件

如果上述情况不可能发生,是否有可能是由于 SQL Server 端的错误或通信错误(而不是应用程序代码端)导致的。

security sql-server visual-studio-2017

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

SQL Server,如何记录失败登录尝试的客户端PID?

我试图找出哪个进程正在尝试使用错误的密码连接到我的 SQL Server 实例。日志文件仅包含发起连接的 IP 地址。例子:

日期 4/05/2021 9:43:34 AM 日志 SQL Server(当前 - 5/05/2021 10:11:00 AM)

源登录

消息 用户“SA”登录失败。原因:密码与提供的登录密码不匹配。[客户端:10.120.1.99]

它不会记录来自客户端计算机的哪个 PID 进行了尝试。
我知道我可以使用探查器来找出哪台机器的哪个 PID 对此负责。但我不想为此保持分析器运行。(特别是如果这种情况很少发生,在这种情况下,我需要让分析器运行几天才能捕获这种尝试)。

有没有办法记录此类失败登录的 PID 和 IP?

security sql-server extended-events error-log

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

为 SQL 用户设置对所有对象的权限

我有一个过程,它遍历数据库中的所有对象并为它们分配适当的权限给该对象。我想知道是否有更好的方法来做到这一点?我使用模型数据库来创建新数据库,因此每次创建新数据库时都必须运行它。这是它的外观的一个想法(注意:从一开始就丢失了一个块,它会删除所有用户并重新创建必要的用户;自从 SID 更改后,这是必要的):

CREATE PROCEDURE usp_SetPermissions 
AS 
 BEGIN

DECLARE @CurrentId INT
DECLARE @ObjectName NVARCHAR(128)
DECLARE @Message NVARCHAR(160)
DECLARE @Error INT
DECLARE @Sql NVARCHAR(256)

CREATE TABLE #tmpDbObjects 
(
   ID INT IDENTITY(1,1),
   ObjectName NVARCHAR(128),
   Completed BIT
)

INSERT #tmpDbObjects(ObjectName, Completed)
SELECT DISTINCT [Name], 0 As Completed 
FROM sys.objects 
WHERE [type] = 'U' AND is_ms_shipped <> 1

WHILE EXISTS (SELECT 1 FROM #tmpDbObjects)
 BEGIN
    -- Pick first uncompleted object
    SELECT TOP 1 @CurrentId = ID,
                 @ObjectName = ObjectName
    FROM #tmpDbObjects

    -- Grant permissions …
Run Code Online (Sandbox Code Playgroud)

security database-design sql-server

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

实施数据库安全?

我想在我创建的数据库上实现数据库安全性,以便没有人可以从 SQL Server Management Studio 访问它,并且只能通过代码访问它。

那可能吗?如果不是,还有其他方法可以阻止用户访问数据库吗?

security sql-server

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