Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何锁定表,以便用户无法对其执行插入、更新和删除操作(只有触发器可以)_Sql_Sql Server_Permissions - Fatal编程技术网

Sql 如何锁定表,以便用户无法对其执行插入、更新和删除操作(只有触发器可以)

Sql 如何锁定表,以便用户无法对其执行插入、更新和删除操作(只有触发器可以),sql,sql-server,permissions,Sql,Sql Server,Permissions,下面是我的表格 CREATE TABLE [dbo].[Test] ( [Id] INT NOT NULL, [CommaSeperatedString] nvarchar(Max) NOT NULL, CONSTRAINT [PK_Test] PRIMARY KEY ([Id]) ) 我想锁定这个表,这样它只能通过触发器更新 也就是说,我不希望用户能够运行 插入 更新 删除 靠着这张桌子。它可能只能通过我设置的一些触发器进行更新 这可能吗?在managemen

下面是我的表格

CREATE TABLE [dbo].[Test]
(
    [Id] INT NOT NULL,
    [CommaSeperatedString] nvarchar(Max) NOT NULL, 
    CONSTRAINT [PK_Test] PRIMARY KEY ([Id]) 
)
我想锁定这个表,这样它只能通过触发器更新

也就是说,我不希望用户能够运行

  • 插入
  • 更新
  • 删除
靠着这张桌子。它可能只能通过我设置的一些触发器进行更新


这可能吗?

在management studio中,您可以转到用户角色-->属性-->安全设置

在此处添加该表,您可以拒绝对该表的权限。 拒绝将否决任何允许的权利。因此,即使用户有另一个表示允许的角色,其权限仍将被拒绝

更多信息:


编辑:如果您的触发器在同一张表上,请使用替代触发器,如其他答案所述。否则使用权

在management studio中,您可以转到用户角色-->属性-->安全设置

在此处添加该表,您可以拒绝对该表的权限。 拒绝将否决任何允许的权利。因此,即使用户有另一个表示允许的角色,其权限仍将被拒绝

更多信息:


编辑:如果您的触发器在同一张表上,请使用替代触发器,如其他答案所述。否则使用权

是的,使用而不是触发器我们可以有条件地阻止其他人进行凝乳操作。但是我们也可以从一些用户那里完全批准或拒绝这些操作。为此,我们使用如下命令

GRANT - gives a user permission to perform certain tasks on database objects
DENY - denies any access to a user to perform certain tasks on database objects
REVOKE - removes a grant or deny permission from a user on certain database objects
请参考本网站


最好的是……

是的,使用而不是触发器我们可以有条件地阻止其他人进行凝乳操作。但是我们也可以从一些用户那里完全批准或拒绝这些操作。为此,我们使用如下命令

GRANT - gives a user permission to perform certain tasks on database objects
DENY - denies any access to a user to perform certain tasks on database objects
REVOKE - removes a grant or deny permission from a user on certain database objects
请参考本网站

祝您一切顺利。…

好了,这里的进入了画面

您可以为
而不是INSERT
创建触发器,而不是UPDATE
和delete

CREATE TRIGGER Trig_INS_Test ON Test
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON

   INSERT INTO Test (CommaSeperatedString)
      SELECT CommaSeperatedString
      FROM inserted

END
好了,这里有一幅图画

您可以为
而不是INSERT
创建触发器,而不是UPDATE
和delete

CREATE TRIGGER Trig_INS_Test ON Test
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON

   INSERT INTO Test (CommaSeperatedString)
      SELECT CommaSeperatedString
      FROM inserted

END

不授予任何.CRUD或只是插入更新删除?(CRUD中的R代表Read)@EdwinStoteler哦,是的,好地方。为了澄清,只需插入
更新
和删除不授予任何权限。CRUD还是只插入更新删除?(CRUD中的R代表Read)@EdwinStoteler哦,是的,好地方。为了澄清,只需插入
更新
删除
如果我的触发器在一个单独的表上怎么办?i、 e.我将一行插入另一个表(
[testnormalized]
),该表更新了
[Test]
table@user1:那么您需要做的是在[TestNormalized]表上生成而不是插入触发器,并在[Test]表上生成而不是更新触发器。如果我的触发器位于单独的表上,该怎么办?i、 e.我将一行插入另一个表(
[testnormalized]
),该表更新了
[Test]
table@user1:那么您需要做的是在[TestNormalized]表上生成而不是插入触发器,并在[Test]表上生成而不是更新触发器。