小编Geo*_*wdy的帖子

SQL 作业步骤以不同的 sql 帐户运行

我很好奇如何设置要作为不同 SQL 登录帐户执行的 SQL 作业步骤。看来我需要设置一个需要现有凭据的新代理帐户。创建凭据时,我唯一的选择是使用 Windows 登录凭据。

我正在尝试运行的工作如下。还有其他附加语句,但是当我将作业步骤设置为在 SQL 登录时运行时,它会失败。

insert into [dbo].[TableA]
SELECT 
       ss.[Ref_ID]
      ,mm.[studentID]
      ,mm.[studentPersonID]
      ,mm.[studentFirstname]
  FROM [dbo].[TableB] mm
  left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
  where ss.Ref_ID is not null;
Run Code Online (Sandbox Code Playgroud)

当它通过 SQL 作业步骤运行时,它会失败。

Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274).  The step failed.
Run Code Online (Sandbox Code Playgroud)

当所有这些表都存在于本地数据库中时,我不清楚为什么它会尝试访问远程服务器。

security sql-server sql-server-2008-r2 sql-server-agent

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

授予对 SQL Server 2000 中所有表、视图、过程的权限

我想知道是否有一种相当有效的方法来使用 T-SQL 和 SQL Server 2000 语法在特定数据库的所有 TABLES 和 VIEWS 上进行 GRANT SELECT、INSERT、UPDATE、DELETE,同时排除 100 多个对象中的 2 个或 3 个。我还希望能够授予对所有存储过程的 EXEC 权限。

目前我正在使用下面的代码来一一更改它们。为大约 100 个表和 100 个视图执行此操作花费的时间太长,并且通过 GUI 将花费更长的时间(除非我也做错了)。

use [DATABASE_NAME]
GO
GRANT DELETE ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT INSERT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT SELECT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT UPDATE ON [dbo].[table_name]TO [user_name]
GO
Run Code Online (Sandbox Code Playgroud)

如何使用 T-SQL 循环遍历所有用户表和视图以授予某些特权,同时排除几个对象?

sql-server permissions sql-server-2000

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

错误:“无法删除证书,因为一个或多个实体使用它进行签名或加密。”

我有一个要从数据库中删除的证书。

如果我发出命令

DROP CERTIFICATE <FooCert>
Run Code Online (Sandbox Code Playgroud)

我收到错误

The certificate cannot be dropped because one or more entities are either signed or encrypted using it
Run Code Online (Sandbox Code Playgroud)

根据 Jason Strate 的说法,我应该能够找出证书签名的内容。

以下查询返回 0 行:

SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id)
FROM sys.certificates c 
INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint
WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' 
AND c.name = 'FooCert'
Run Code Online (Sandbox Code Playgroud)

我还尝试根据这个 SO 问题将实体解耦。 /sf/ask/3672231/

如何删除对这个证书的依赖,以便我可以删除它?

sql-server encryption sql-server-2012 signature certificate

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

VM 克隆后无法更改服务器名称

由于我无法控制的原因,我必须找到解决此问题的方法。简单地重新安装实例并不是一个选择。在 sys.servers 中显示为 server_id 0 的服务器名称仍显示旧的服务器名称。

运行以下命令时出现错误:

sp_dropserver 'OLD_INSTANCE'
GO
sp_addserver 'NEW_INSTANCE', Local
GO 
Run Code Online (Sandbox Code Playgroud)

错误信息:

消息 15190,级别 16,状态 1,过程 sp_dropserver,第 67 行
服务器“OLD_INSTANCE”仍有远程登录或链接登录。
消息 15028,级别 16,状态 1,过程 sp_addserver,第 87 行
服务器“NEW_INSTANCE”已存在。

最奇怪的是,远程登录是“空”登录。

exec sp_dropremotelogin @remoteserver = 'OLD_INSTANCE'
go
Run Code Online (Sandbox Code Playgroud)

错误信息:

消息 15185,级别 16,状态 1,过程 sp_dropremotelogin,第 70 行
没有从远程服务器“OLD_INSTANCE”映射到本地用户“(null)”的远程用户“(null)”。

旧实例不存在登录信息。

sp_helpremotelogin 'OLD_INSTANCE'
Run Code Online (Sandbox Code Playgroud)

消息 15201,级别 16,状态 1,过程 sp_helpremotelogin,第 37
行 远程服务器“OLD_INSTANCE”没有远程登录。

如果无法删除不存在的登录名,如何重命名该实例?有没有办法刷新登录信息?

sql-server instance sql-server-2008-r2

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

SQL 代理 PowerShell 语法错误

我正在尝试在 SQL 代理作业 (SQL Server 2016) 中设置 PowerShell 脚本。我正在使用第三方模块 DBATOOLS.psd1,它似乎是我遇到语法错误的地方。目前我的 SQL 作业有一行代码失败:

Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1
Run Code Online (Sandbox Code Playgroud)

为什么作业失败并出现以下错误?当我通过 PowerShell ISE 运行它时,此命令工作正常。

Error Message: Unable to start execution of step 1 (reason: line(5): Syntax error).  The step failed.
Run Code Online (Sandbox Code Playgroud)

sql-server powershell sql-server-agent sql-server-2016 dbatools

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

还原的数据库与原始数据库不同

我最近将我们的数据仓库临时数据库还原到我们开发环境中的一个单独实例上。恢复后我做了一个比较,看起来数据库大小不同。Staging_Original 为 8246 MB,而 Staging_New 为 7571.63 MB。新数据库中的 2 个表似乎丢失了,并且由于某种原因,新数据库中有一个旧数据库中不存在的表。如果我执行了完整备份和还原,这怎么可能?如何获取一个数据库的精确副本并将其还原到第二个实例中?两个模型数据库似乎也相同。

备份脚本:

BACKUP DATABASE [BI_Staging] TO  DISK = N'G:\BI_Staging.bak' 
  WITH NOFORMAT, NOINIT,  NAME = N'BI_Staging-Full Database Backup', 
  SKIP, NOREWIND, NOUNLOAD,  STATS = 10, CHECKSUM
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset 
  where database_name=N'BI_Staging' 
  and backup_set_id=(select max(backup_set_id) 
    from msdb..backupset where database_name=N'BI_Staging' )
if @backupSetId is null 
begin 
  raiserror(N'Verify failed. Backup information for database ''BI_Staging'' not found.', 16, 1) 
end
RESTORE VERIFYONLY FROM  DISK = N'G:\BI_Staging.bak' 
  WITH FILE = …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

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

当用户属于具有各种权限的多个组时,SQL Server 如何处理登录?

我试图围绕 SQL Server 如何决定根据用户登录权限授予某些权限。如果用户属于有权访问 DB1 的“READ ONLY”组,但他们也属于对同一 DB1 具有完全数据库所有者权限的“SysAdmin”组,则他们在登录时会获得哪些权限? 在类似的说明上。如果他们是一个组的一部分,但也有一个具有其他中间权限的独立帐户怎么办?

security sql-server

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

9 位邮政编码报告的 LEN 为 12

我正在尝试解决让邮政编码正确显示的一些困难。

原始电子表格具有混合 5 位和 9 位格式的邮政编码。导入过程后,这些 9 位邮政编码报告的长度为 12 位。现在,当我尝试在 9 位邮政编码中添加连字符“-”时,由于长度错误和各种数据类型转换问题,我得到了异常结果和错误。

导入是使用 openrowset 方法从电子表格导入数据执行的。

当我查询新导入的数据时,我看到邮政编码显示与电子表格中的相同,但长度错误。

SELECT ZIP,
    LEN(LTRIM(RTRIM(Zip))) AS ZIPLENGTH
  FROM XLS_IMPORT
Run Code Online (Sandbox Code Playgroud)
SELECT ZIP,
    LEN(LTRIM(RTRIM(Zip))) AS ZIPLENGTH
  FROM XLS_IMPORT
Run Code Online (Sandbox Code Playgroud)

如果我选择数据的左侧 9 个字符,则所有内容都将转换为浮点数,并且邮政编码现在无法读取。

SELECT LEFT(ZIP,9) FROM XLS_IMPORT
WHERE LEN(LTRIM(RTRIM(ZIP))) = 12
Run Code Online (Sandbox Code Playgroud)
ZIP         ZIPLENGTH
45750       5
432013256   12
441153221   12
44120       5
441351362   12
Run Code Online (Sandbox Code Playgroud)

如何将这些邮政编码恢复为正确的 9 位数字?或者如何在报告长度为 12 的 9 位邮政编码中添加连字符?我的最终目标是简单地让 9 位邮政编码在中间有一个连字符。

Zip列的数据类型是float.

我刚刚发现我的一些电子表格(如 NJ 和 NY)在邮政编码的前导 0 之前有一个撇号。我需要研究如何处理 '0xxxx 邮政编码,以使其在我的一些电子表格导入中工作。

sql-server sql-server-2012 openrowset

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

无法从 SQL SERVER 2012 中删除域登录

我们正在尝试清理我们 AlwaysOn 集群之一上的一些旧帐户。

这个特定的帐户拒绝玩好并允许自己被删除。

USE [master]
GO
DROP LOGIN [PROD\dba007]
GO
Run Code Online (Sandbox Code Playgroud)

错误:

Msg 15173, Level 16, State 1, Line 4
Server principal 'PROD\dba007' has granted one or more permission(s). Revoke the permission(s) before dropping the server principal.
Run Code Online (Sandbox Code Playgroud)

它抱怨的权限是对 HADR_ENDPOINT 的连接权限

Select perm.* from sys.server_permissions  perm
INNER JOIN sys.server_principals prin ON perm.grantor_principal_id = prin.principal_id
where prin.name = N'PROD\dba007'

class   class_desc  type    permission_name state   state_desc
105     ENDPOINT    CO      CONNECT         G       GRANT
Run Code Online (Sandbox Code Playgroud)

现在下一个合乎逻辑的事情是撤销连接权限。

USE master;
REVOKE CONNECT ON ENDPOINT ::HADR_endpoint from [PROD\dba007]
Run Code Online (Sandbox Code Playgroud)

但这会产生消息 …

security sql-server permissions sql-server-2012

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

从 SQL 查询中排除记录

我有一个表,我试图只返回 rendition_type Interactive 的记录,而没有其他关联的 rendition_type。如果一个记录有多个 rendition_type,我需要将它从列表中排除。

DOC_ID    RENDITION_ID    RENDITION_TYPE
001       001             Interactive
001       002             Web PDF
002       003             Interactive
003       004             Interactive
003       005             Print PDF
004       006             Interactive
005       007             Interactive
005       008             Web PDF
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个查询,该查询将仅返回 document_ID 的 Rendition_type 类型仅为 1 且该类型为 Interactive 的行。

sql-server t-sql sql-server-2017

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