我很好奇如何设置要作为不同 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)
当所有这些表都存在于本地数据库中时,我不清楚为什么它会尝试访问远程服务器。
我想知道是否有一种相当有效的方法来使用 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 循环遍历所有用户表和视图以授予某些特权,同时排除几个对象?
我有一个要从数据库中删除的证书。
如果我发出命令
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/
如何删除对这个证书的依赖,以便我可以删除它?
由于我无法控制的原因,我必须找到解决此问题的方法。简单地重新安装实例并不是一个选择。在 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 代理作业 (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
我最近将我们的数据仓库临时数据库还原到我们开发环境中的一个单独实例上。恢复后我做了一个比较,看起来数据库大小不同。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 如何决定根据用户登录权限授予某些权限。如果用户属于有权访问 DB1 的“READ ONLY”组,但他们也属于对同一 DB1 具有完全数据库所有者权限的“SysAdmin”组,则他们在登录时会获得哪些权限? 在类似的说明上。如果他们是一个组的一部分,但也有一个具有其他中间权限的独立帐户怎么办?
我正在尝试解决让邮政编码正确显示的一些困难。
原始电子表格具有混合 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 邮政编码,以使其在我的一些电子表格导入中工作。
我们正在尝试清理我们 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)
但这会产生消息 …
我有一个表,我试图只返回 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 ×10
security ×3
permissions ×2
certificate ×1
dbatools ×1
encryption ×1
instance ×1
openrowset ×1
powershell ×1
signature ×1
t-sql ×1