小编Sol*_*zky的帖子

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

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

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

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

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

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

schema security sql-server stored-procedures permissions

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

乌克兰使用什么排序规则?

我们有一个带有 SQL Server 数据库的会计程序,并希望启动乌克兰版本。我不确定使用哪种排序规则:乌克兰语Cyrillic_General

对于非技术乌克兰语,我们比较了Cyrillic_general乌克兰语的校对图表,发现表末尾只有细微的差异。那个人认为Cyrillic_general应该没问题。

此外,SQL Server 2012 不再列出乌克兰语排序规则。这是一个令人担忧的理由吗?

有什么建议可以选择吗?

sql-server collation unicode

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

如何在 SQL Server 2012 中禁用区分大小写?

我尝试collation_namesys.databases. 我正在尝试将 'SQL_Latin1_General_CP1_CS_AS' 更改为 'SQL_Latin1_General_CP1_CI_AS' 以禁用表中的区分大小写。

update d set d.collation_name='SQL_Latin1_General_CP1_CI_AS'
--SELECT name, collation_name 
FROM sys.databases d
WHERE name = 'db_name' 
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:


不允许消息 259,级别 16,状态 1,第 1 行对系统目录进行临时更新。

collation character-set sql-server-2012 unicode

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

如何取回传递给 HASHBYTES() 的值?

我想使用 SQL ServerHASHBYTES()功能。

但我不知道如何取回传递给HASHBYTES...的值

sql-server t-sql hashing

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

存储过程作为所有者执行关闭数据库连接不起作用

我创建了一个存储过程,允许用户在 QA 环境中关闭所有数据库连接。我是 SA 并创建了程序。

当我修改 SP 时,在没有“以所有者身份执行”的情况下运行它,我得到了结果。当我添加“以所有者身份执行”时,我没有收到任何结果。

试图理解为什么。

create procedure [dbo].[DatabaseConnectionClose]
    @DatabaseName varchar(255)
with execute as owner
as


DECLARE @kill varchar(8000) = '';  
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id(@DatabaseName)

select @kill as CloseConnectionScript

EXEC(@kill);
Run Code Online (Sandbox Code Playgroud)

sql-server permissions sql-server-2012 connections impersonation

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

使用 oneliner sql 语句创建包含换行符的存储过程

我想将代码放在一行中,该行将创建一个包含换行符的存储过程。

  • 那可能吗?
  • 我需要使用 sp_executesql 吗?
  • 如何在 sql 语句中转义换行符?
  • 如何在字符串中转义换行符?

sql-server stored-procedures dynamic-sql t-sql

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

在存储过程创建期间重新创建用户和架构

如主题中所述,当与我一起工作的开发人员创建存储过程时,正在创建新用户和架构。最初我为该开发人员分别创建了一个用户和登录名,但后来都删除了。但是,每当他们运行脚本来创建 SP 时,都会重新创建以他们的 Active Directory 名称命名的用户和架构,并将 SP 放置在该“新”架构中。

即使我删除了 SP、用户和架构,如果他们再次创建 SP,用户和架构也会回来。

有没有人对此有任何见解?

schema sql-server stored-procedures users sql-server-2016

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

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

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

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

谢谢

schema security sql-server role t-sql

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

授予用户还原数据库的权限

在数据库中,我创建了一个具有以下角色的用户:

服务器角色

  • 民众

数据库角色

  • db_backupoperator
  • db_ddladmin
  • db_datareader
  • db_datawriter

问题是我不想更改用户的角色,但我想授予恢复数据库的权限。

是否有解决方法只授予还原权限但不删除或更改数据库?

背景资料:

我工作的公司创建了一个应用程序,他们希望该应用程序的用户有权备份和恢复数据库,但不能创建另一个数据库或删除现有数据库。而且,他们不希望有另一个具有 角色的用户db_owner,这将允许客户随心所欲地操纵事物。

该应用程序的价格取决于客户拥有的员工人数,因此在客户端安装该应用程序时,他们使用一个文件来创建一个数据库,在其中指定所有详细信息(包括员工人数),但他们担心有人可能会多次更改文件并添加数据库,因此他们希望通过不授予任何用户执行任何操作的权限来保护实例。这很复杂,但这正是他们想要的。

sql-server permissions role restore sql-server-2019

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

当字符串包含阿拉伯语单词时,如何在 SELECT CASE 中创建新列?

我的 select case when 语句有问题,我想在 select case when 语句中添加一个新列,我得到了结果,但是?????因为我已将该列设置为阿拉伯语单词,所以我试图转换新列nvarchar(55)不幸的是,我得到了相同的结果。

我怎样才能得到正确的结果?

SELECT case when ( CAST(o.startTime as time(7)) > cast(Start as time(7))) 
          then  cast('????' as nvarchar(55))
          else cast('????' as nvarchar(55)) end as stat,
       userId, FirstName
from   Users, TimeTable
Run Code Online (Sandbox Code Playgroud)

sql-server collation case encoding unicode

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