对于角色db_denycustomer,我只希望客户表的列代码是 SELECTable 的,其他的都不行。所以我这样做了:
DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer
Run Code Online (Sandbox Code Playgroud)
...它工作正常。凉爽的!但是,为什么?
我在相关文章中读到的是权限堆栈,但DENY优先。相比之下,就我而言,似乎最后一个权限“查询”优先。果然,如果我以相反的顺序执行它们,后者DENY也会隐藏代码列。
你能详细说明一下吗?
我还为我测试的用户提供了默认值db_datawriter和db_datareader角色。
我想在 sql server 上设置事务复制。按照ms复制准备教程和ms复制配置教程的说明,一切正常。
我的问题是:为什么所有这 4 个用户?如果我每一步只使用一个 Windows 用户/数据库登录名而不是 4 个,会不会有什么问题?
迟早,数据库开发人员会遇到并可能使用许多对象的命名方案,如外键、默认约束等。
让我们考虑这个例子:将所有外键命名为:
FK__[name of source table]__[name of source col]__ref__[name of master table]__[name of master column]
例如,当使用create table提及 fk 但未明确提供约束名称的语句时,可以使用什么样的参数化/外部程序来实现具有这样的默认名称?
当我调试死锁时,我注意到在 xml 中resource-list,第一个和第三个对象锁是相同的。这有什么原因吗?
逐字逐句<resource-list>:
<resource-list>
<objectlock lockPartition="0" objid="580509447" subresource="FULL" dbid="7" objectname="censoredV2.dbo.pt_sales" id="lock1929b2d5500" mode="Sch-M" associatedObjectId="580509447">
<owner-list>
<owner id="process194df0e5468" mode="Sch-M" />
</owner-list>
<waiter-list>
<waiter id="process1947a066ca8" mode="Sch-M" requestType="wait" />
</waiter-list>
</objectlock>
<objectlock lockPartition="0" objid="94623380" subresource="FULL" dbid="7" objectname="censoredV2.dbo.pt" id="lock1929a8cf480" mode="IX" associatedObjectId="94623380">
<owner-list>
<owner id="process1907da684e8" mode="IX" />
</owner-list>
<waiter-list>
<waiter id="process194df0e5468" mode="Sch-M" requestType="wait" />
</waiter-list>
</objectlock>
<objectlock lockPartition="0" objid="580509447" subresource="FULL" dbid="7" objectname="censoredV2.dbo.pt_sales" id="lock1929b2d5500" mode="Sch-M" associatedObjectId="580509447">
<owner-list>
<owner id="process1947a066ca8" mode="Sch-M" requestType="wait" />
</owner-list>
<waiter-list>
<waiter id="process1907da684e8" mode="IX" requestType="wait" />
</waiter-list>
</objectlock>
</resource-list>
Run Code Online (Sandbox Code Playgroud) 当我有一个包含多个查询的事务时,我可以通过使用waitfor和检查dm_tran_locks.
但我不能将一个查询“暂停”一半。具体来说,我想知道这个查询将如何持有锁:
update my_table set column1=new_value
where column2=filter_value
Run Code Online (Sandbox Code Playgroud)
这会从一开始就采取更新锁定吗?还是会先获取共享锁,直到确定指定的行where,然后请求 U 锁?