我公司专门使用Windows机器,当我登录Windows域时,它可以访问一些共享驱动器和数据库。 现在我想在容器中运行R,例如按照教程 https://ropenscilabs.github.io/r-docker-tutorial/02-Launching-Docker.html
我的问题如下:我的R脚本在此容器中执行的方式是否继承了主机操作系统的权限? 访问使用Windows身份验证的MSSQL数据库似乎特别棘手......
答案 0 :(得分:9)
RockScience,
我在这里看到两个选项,它们都允许您继承权限,而不是传入用户和密码凭据。要解决您的具体问题,请在Linux周围查看:
如果您采用运行Windows容器的方法,请查看Active Directory gMSA(组管理服务帐户)帐户以及以下MSDN文章和视频:
这将使您能够创建Windows容器和R环境。
本教程介绍如何在Linux上配置SQL Server以支持Active Directory(AD)身份验证,也称为集成身份验证。 AD身份验证允许Windows或Linux上的已加入域的客户端使用其域凭据和Kerberos协议对SQL Server进行身份验证。
AD身份验证与SQL Server身份验证相比具有以下优势:
本教程包含以下任务:
今天,群组托管服务帐户通常用于保护一台计算机或服务与另一台计算机或服务之间的连接。使用一个的一般步骤是:
启动服务后,加入域的主机会自动从Active Directory获取gMSA机密,并使用该帐户运行该服务。由于该服务作为gMSA运行,因此它可以访问gMSA允许的任何资源。
--security-opt "credentialspec=..."
启动容器时,作为本地系统或网络服务运行的已安装服务将显示为作为gMSA运行。这类似于这些帐户在加入域的主机上的工作方式,除了使用gMSA而不是计算机帐户。
当服务作为容器中的本地系统或网络服务运行时,它可以使用Windows集成身份验证连接到Microsoft SQL Server。
复制
Server=sql.contoso.com;Database=MusicStore;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30
在Microsoft SQL Server上,使用域和gMSA名称创建登录名,后跟$。创建登录后,可以将其添加到数据库中的用户并获得适当的访问权限。
SQL
复制
CREATE LOGIN "DEMO\WebApplication1$"
FROM WINDOWS
WITH DEFAULT_DATABASE = "MusicStore"
GO
USE MusicStore
GO
CREATE USER WebApplication1 FOR LOGIN "DEMO\WebApplication1$"
GO
EXEC sp_addrolemember 'db_datareader', 'WebApplication1'
EXEC sp_addrolemember 'db_datawriter', 'WebApplication1'
要查看它的实际效果,请在会话中查看Microsoft Ignite 2016提供的录制演示" Walk the Path to Containerization - transforming workloads into containers"。
答案 1 :(得分:2)
正如@Technophobe01所示,Windows容器更适合继承AD权限。
在将R脚本连接到文件共享和MS SQL数据库方面,我建议使用以下
使用R脚本中的连接字符串连接到数据库
这是一种传统方法,而不是继承一些权限
见SQL Server RODBC Connection
library(RODBC)
conn <- odbcDriverConnect('driver={SQL Server};server=mysqlhost;database=mydbname;uid=user;pwd=pwd')
您可以在部署时使用ENV vars指定任何敏感字段,或者在Docker机密中将其加载到R脚本中。
见https://blogs.msdn.microsoft.com/stevelasker/2016/06/14/configuring-docker-for-windows-volumes/
1.将网络驱动器映射到Windows docker主机上
2.在docker设置中将它们指定为容器可用,您需要添加具有管理员权限的新用户帐户
3.假设网络驱动器映射到d:
docker run -v d:/somedata:/data <container> ls /data
将驱动器安装在/data
的容器中并列出其内容。