我需要限制对特定用户的访问,但他们仍然需要能够查看 dbo 拥有的表中的数据。
我正在尝试执行以下操作:
这是我尝试过的:
但是,在以 user1 身份登录时使用以下语句:
EXEC get_profiles 1
Run Code Online (Sandbox Code Playgroud)
结果是:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过WITH EXECUTE AS OWNER并且无法开始理解“所有权链接”应该如何工作。
我也试过
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO …Run Code Online (Sandbox Code Playgroud) 我想将数据库中可用的特定表备份到一个.bak文件中,所有这些都应该使用 T-SQL 脚本来完成。
我有下面给出的 SQL 查询,我想使用like运算符选择多个值。
我的查询正确吗?
SELECT top 1 employee_id, employee_ident, utc_dt, rx_dt
FROM employee
INNER JOIN employee_mdata_history
ON employee.ident=employee_mdata_history.employee_ident
WHERE employee_id like 'emp1%' , 'emp3%'
ORDER BY rx_dt desc
Run Code Online (Sandbox Code Playgroud)
如果没有,有人可以纠正我吗?
我的表有大量以'emp1'和开头的数据'emp3'。我可以根据前 3 个“emp1”和前 2 个“emp3”过滤结果rx_dt吗?
我客户的 SQL 服务器上有很多数据库。这些数据库正在开发中,因此开发人员可以进行设计、重构、数据修改等。有一些数据库很少更改。我的客户必须确保所有这些都安全(备份)并花一些时间管理环境。(公司没有DB管理员职位。)经过长时间的讨论,客户决定使用每日完整备份策略,因为恢复容易。
所以这里是情况的总结:
主要问题:如何检测数据库已更改。问题的第一部分(DDL 更改)可以通过使用DDL 触发器来解决。但是数据更改(DML 更改)是一个问题。不可能将 DML 触发器应用于所有数据库的所有表以跟踪更改(性能、扩展对象的管理......)。备份引擎必须跟踪所有更改以将每个数据库标记为准备备份。
Change Data Capture是一个解决方案,但它似乎太重了(它还需要 SQL Server 企业版)。
另一种方法是跟踪数据库文件更改(大小或上次更改时间),但它无法正常工作:当数据库超过所有保留的可用空间时,它可以更改其大小,而sp_spaceused不是解决方案。
跟踪是一种解决方案,但它会导致性能问题并需要额外的管理。
是否有任何解决方案可以在不影响其他数据库管理对象(如统计信息..)的情况下计算实际数据库使用大小?当然,对不改变表大小的表数据的更改不会触发(我认为),但总比没有好。我真的在寻找 SQL Server 2008 的直接或间接解决方案。
感谢您的任何评论、解决方案和想法。
添加:
这是解决方案(感谢玛丽安):
Select
NextLSN = MAX(fn.[Current LSN])
,Databasename = DB_NAME()
from fn_dblog(NULL, NULL) fn
LEFT JOIN sys.allocation_units au
ON fn.AllocUnitId = au.allocation_unit_id
LEFT JOIN sys.partitions p
ON p.partition_id = au.container_id
LEFT JOIN sys.objects so
ON so.object_id = p.object_id
WHERE
(
(Operation …Run Code Online (Sandbox Code Playgroud) 请在 stackoverflow 上查看此问题:
我正在使用 EasySoft ODBC 驱动程序将 SQL Server 2008 R2 Express 实例链接到 Interbase,但在从远程服务器获取元数据时遇到了一些困难。从网上看,主要建议都提到使用 OPENQUERY 而不是四部分链接服务器语法。
EG 我目前的(有问题的)方法是......
Run Code Online (Sandbox Code Playgroud)CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)但是在某些表上,调用视图时出现错误...
消息 7353,级别 16,状态 1,第 1 行链接服务器“LBLIVE”的 OLE DB 提供程序“MSDASQL”提供了不一致的元数据。在执行期间提供了一个在编译时找不到的额外列。
此外,我什至无法创建一些视图,因为我得到以下...
消息 7315,级别 16,状态 1,第 1 行 链接服务器“LBLIVE”的 OLE DB 访问接口“MSDASQL”包含多个与名称“SYSDBA”.“AUDIT_LBABKP”相匹配的表。
虽然只提到了其中一张表。
搜索网络的替代方法似乎更像是......
Run Code Online (Sandbox Code Playgroud)SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')所以,我的问题是,如果我在视图定义中使用 OPENQUERY,SQL Server 是否能够优化发送到 Interbase 的结果 SQL?或者这两种方法之间真的没有太大区别?
这是一个交叉主题,会喜欢 dba 的 POV。
检查我的 SQL Server 日志,我看到几个这样的条目:
Date: 08-11-2011 11:40:42
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:42
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Date: 08-11-2011 11:40:41
Source: Logon
Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50]
Date: 08-11-2011 11:40:41
Source: Logon
Message: Error: 18456. Severity: 14. State: 8.
Run Code Online (Sandbox Code Playgroud)
等等..这可能是中国人对我的 SQL Server 的攻击吗???!我在 ip-lookup.net 上查找了 IP 地址,它说它是中文的。 …
我需要将数据库(作为一个整体)传输到另一台服务器,以制作一个重复的数据库来设置另一个测试环境。
我有两个选择:
根据我的要求,这两种解决方案的优缺点是什么?
我正在使用 SQL Server 2008 企业版。
在网上搜索,我发现在指定过宽的 VARCHAR 列时是否会影响性能的建议相互矛盾,例如 VARCHAR(255) 时 VARCHAR(30) 可能会这样做。
我一致认为,如果整行超过 8060 字节,性能会受到影响。除此之外,我看到了分歧。
索赔是真的The default is SET ANSI PADDING ON = potential for lots of trailing spaces吗?只要总行宽小于 8060,过大的 VARCHAR 列是否有任何真正的性能问题?
列宽很重要的证据
The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need.
http://www.sql-server-performance.com/2007/datatypes/
Length is a constraint on the data (like CHECK, FK, NULL etc)Performance when the row exceeds 8060 bytesCan not have unique constraint or index (key column width must …我需要为表的每条记录存储一个位数组,支持以下操作:
测试是否设置了位,并设置了位(使用 SQL)
使用 ADO 2.8(不是 ADO.NET)查询和设置值
索引(为了从“覆盖索引”功能中受益)
要存储在此数组中的最大位数是固定的,但可能会超过 32。也就是说,一个简单的int列并不总是有效。
从我目前所见,我的选择是:
第一个选项可行,但需要对访问数据的代码进行大量重构。第二个选项只是暂时的缓解,从我目前的搜索来看,我不太确定 ADO 是否与bigint一起工作得那么好。我没有使用binary 的经验,我不知道任何其他选项。
根据要求,您会选择哪种数据类型?
使用 SQL Server 2005,您可以查看任务管理器,至少可以粗略地查看分配给 SQL Server 的内存量。
在 SQL Server 2008 中,工作集或提交大小从未真正超过 500 MB,即使 SQLServer:Memory Manager/Total Server Memory (KB) perf 计数器指出 16,732,760。
是否有设置可以在任务管理器中实际显示服务器内存?或者是因为他们改变了 SQL Server 中内存的使用方式
sql-server-2008 ×10
sql-server ×8
backup ×2
datatypes ×1
like ×1
memory ×1
operator ×1
restore ×1
trigger ×1
varchar ×1