我在 SQL Server 2012 数据库中创建了一个用户,并撤销了该角色授予的所有权限public。
然后我授予了EXECUTE存储过程的权限。用户可以执行该过程,但无法获取其返回的数据。
该过程位于 中schema1,它从中选择的表位于 中schema2。
如果我将用户添加到db_datareader角色,它可以从数据库中的所有表中读取所有数据。我尝试使用WITH EXECUTE AS OWNER但没有成功。
我怎样才能只授予对给定过程的访问权限而不授予其他任何权限?
我们有一个带有 SQL Server 数据库的会计程序,并希望启动乌克兰版本。我不确定使用哪种排序规则:乌克兰语或Cyrillic_General?
对于非技术乌克兰语,我们比较了Cyrillic_general和乌克兰语的校对图表,发现表末尾只有细微的差异。那个人认为Cyrillic_general应该没问题。
此外,SQL Server 2012 不再列出乌克兰语排序规则。这是一个令人担忧的理由吗?
有什么建议可以选择吗?
我尝试collation_name在sys.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 行对系统目录进行临时更新。
我想使用 SQL ServerHASHBYTES()功能。
但我不知道如何取回传递给HASHBYTES...的值
我创建了一个存储过程,允许用户在 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
我想将代码放在一行中,该行将创建一个包含换行符的存储过程。
如主题中所述,当与我一起工作的开发人员创建存储过程时,正在创建新用户和架构。最初我为该开发人员分别创建了一个用户和登录名,但后来都删除了。但是,每当他们运行脚本来创建 SP 时,都会重新创建以他们的 Active Directory 名称命名的用户和架构,并将 SP 放置在该“新”架构中。
即使我删除了 SP、用户和架构,如果他们再次创建 SP,用户和架构也会回来。
有没有人对此有任何见解?
我正在使用 GUI 工具在我的 SQL Server 2016 数据库中上传数据。用于上述任务的用户已被授予 sysadmin 权限,我创建了一个专用架构来存储上述数据。这个架构是拥有的,默认为上述用户。问题是,当我上传数据时,它存储在 dbo 模式而不是专用模式中,我无法从该用户那里撤销 sysadmin priv。
请让我知道如何在不撤销 sysadmin priv 的情况下将数据上传到这个专用模式?
谢谢
在数据库中,我创建了一个具有以下角色的用户:
问题是我不想更改用户的角色,但我想授予恢复数据库的权限。
是否有解决方法只授予还原权限但不删除或更改数据库?
背景资料:
我工作的公司创建了一个应用程序,他们希望该应用程序的用户有权备份和恢复数据库,但不能创建另一个数据库或删除现有数据库。而且,他们不希望有另一个具有 角色的用户db_owner,这将允许客户随心所欲地操纵事物。
该应用程序的价格取决于客户拥有的员工人数,因此在客户端安装该应用程序时,他们使用一个文件来创建一个数据库,在其中指定所有详细信息(包括员工人数),但他们担心有人可能会多次更改文件并添加数据库,因此他们希望通过不授予任何用户执行任何操作的权限来保护实例。这很复杂,但这正是他们想要的。
我的 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 ×9
collation ×3
permissions ×3
schema ×3
t-sql ×3
unicode ×3
role ×2
security ×2
case ×1
connections ×1
dynamic-sql ×1
encoding ×1
hashing ×1
restore ×1
users ×1