我在 SQL Server 2012 数据库中创建了一个用户,并撤销了该角色授予的所有权限public。
然后我授予了EXECUTE存储过程的权限。用户可以执行该过程,但无法获取其返回的数据。
该过程位于 中schema1,它从中选择的表位于 中schema2。
如果我将用户添加到db_datareader角色,它可以从数据库中的所有表中读取所有数据。我尝试使用WITH EXECUTE AS OWNER但没有成功。
我怎样才能只授予对给定过程的访问权限而不授予其他任何权限?
需要帮助解决使用Ola Hallengren 的存储过程将数据库备份到共享文件夹的问题。
我有一个在 SQL Server 启动时执行的过程。它运行Ola Hallengren的DatabaseBackup程序。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子句 - 又是同样的错误。
所以问题是:
我该怎么做才能让它发挥作用?
\\machine2\backup\)我们刚刚发现了另一台带有数据库的服务器。数据库归 SQL 帐户所有SA,具有public和sysadmin角色。另一个登录名是BUILTIN\Users,只有public。我只能通过这个连接。SA是disabled,即使不是,我们也可能不知道密码。
问题:有什么方法可以使用enable SA或创建另一个 sql 登录sysadmin?
我正在尝试创建一个 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) 出于安全考虑,我们希望每天更改启动 SQL Server 服务的密码。是否可以在不重新启动服务的情况下执行此操作?
如果有可能,更改会立即应用,还是我最终需要重新启动服务以获取新密码?
我们正在考虑在 Windows 操作系统的服务选项中而不是在 SQL Server 配置管理器中进行此更改。
我正在使用 GUI 工具在我的 SQL Server 2016 数据库中上传数据。用于上述任务的用户已被授予 sysadmin 权限,我创建了一个专用架构来存储上述数据。这个架构是拥有的,默认为上述用户。问题是,当我上传数据时,它存储在 dbo 模式而不是专用模式中,我无法从该用户那里撤销 sysadmin priv。
请让我知道如何在不撤销 sysadmin priv 的情况下将数据上传到这个专用模式?
谢谢
我发现我的数据库中的一项存在差异错误(剩余数量 <>(采购 - 销售))。到目前为止,有超过5000个项目,超过100,000笔交易。对于此计算,每次都运行相同的过程。
但只有一个项目有错误,而且只发生过一次。它似乎没有从应用程序方面发生,因为它已经运行了超过 100,000 次。数据库服务器没有受到物理保护,也没有连接到 Internet。只有我可以登录到服务器。自从我记录错误以来,程序中没有发生任何异常。我不明白上述错误是如何发生的。
我已经看到可以使用记事本打开未加密的 SQL Server 备份文件并读取其数据。以下场景是否可能?
如果上述情况不可能发生,是否有可能是由于 SQL Server 端的错误或通信错误(而不是应用程序代码端)导致的。
我试图找出哪个进程正在尝试使用错误的密码连接到我的 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?
我有一个过程,它遍历数据库中的所有对象并为它们分配适当的权限给该对象。我想知道是否有更好的方法来做到这一点?我使用模型数据库来创建新数据库,因此每次创建新数据库时都必须运行它。这是它的外观的一个想法(注意:从一开始就丢失了一个块,它会删除所有用户并重新创建必要的用户;自从 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) 我想在我创建的数据库上实现数据库安全性,以便没有人可以从 SQL Server Management Studio 访问它,并且只能通过代码访问它。
那可能吗?如果不是,还有其他方法可以阻止用户访问数据库吗?